给一个长度为 n 的数组,数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。
例如输入一个长度为9的数组[1,2,3,2,2,2,5,4,2]。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。
数据范围:
,数组中元素的值
要求:空间复杂度:
,时间复杂度
保证数组输入非空,且保证有解
[1,2,3,2,2,2,5,4,2]
2
[3,3,3,3,2,2,2]
3
[1]
1
function MoreThanHalfNum_Solution( numbers ) {
let halfLen = parseInt(numbers.length / 2)
let map = {}
for (let i = 0; i < numbers.length; i ++) {
if (!map.hasOwnProperty(numbers[i])) {
map[numbers[i]] = 0
}
if (++ map[numbers[i]] > halfLen) return numbers[i]
}
}
module.exports = {
MoreThanHalfNum_Solution : MoreThanHalfNum_Solution
}; function MoreThanHalfNum_Solution(numbers)
{
// write code here
numbers.sort()
return numbers[Math.floor(numbers.length / 2)]
} function MoreThanHalfNum_Solution(numbers)
{
// write code here
let map=new Map()
let x=Math.floor(numbers.length/2)
for(let i=0;i<numbers.length;i++){
if(map.has(numbers[i])){
map.set(numbers[i],map.get(numbers[i])+1)
if(map.get(numbers[i])>x) return numbers[i]
}else map.set(numbers[i],1)
}
return numbers[0]
} function MoreThanHalfNum_Solution(numbers)
{
// write code here
let len = numbers.length
let half = len >> 1
let map = new Map()
for(let i of numbers){
if(map.has(i)) map.set(i, map.get(i)+1)
else map.set(i,1)
if(map.get(i) > half) return i
}
}
module.exports = {
MoreThanHalfNum_Solution : MoreThanHalfNum_Solution
}; function MoreThanHalfNum_Solution(numbers)
{
// write code here
//解法一,统计
// let target = numbers.length/2;
// let n = '0';
// let obj = {};
// numbers.forEach(item=>{
// if(obj[item]){
// obj[item]++;
// }else{
// obj[item]=1;
// }
// })
// for(let i in obj){
// if(obj[i]>target){
// n = i;
// }
// }
//return n;
//解法二,先排序,再取中间位置,向下取整
numbers.sort((a,b)=>{
return a-b;
});
return numbers[Math.floor(numbers.length/2)];
}
module.exports = {
MoreThanHalfNum_Solution : MoreThanHalfNum_Solution
};
function MoreThanHalfNum_Solution(numbers)
{
// write code here
let map = new Map()
for(let i=0;i<numbers.length;i++){
if(map.has(numbers[i])){
map.set(numbers[i],map.get(numbers[i])+1)
}else{
map.set(numbers[i],1)
}
}
for(let item of map){
if(item[1] > numbers.length / 2){
return item[0]
}
}
} function MoreThanHalfNum_Solution(numbers)
{
// write code here
var count = 0;
var res = 0;
for (var i = 0; i < numbers.length; i++) {
if (count == 0) {
res = numbers[i];
}
if (numbers[i] == res) {
count++;
} else {
count--;
}
}
console.log(res);
return res;
}
module.exports = {
MoreThanHalfNum_Solution : MoreThanHalfNum_Solution
}; function MoreThanHalfNum_Solution(numbers)
{
// write code here
if (numbers.length == 1) {
return numbers[numbers.length - 1];
}
// 排序
numbers.sort();
// 新建一个对象 将每个数出现的次数与此数组成键值对
var obj = {}
for (var i = 0; i < numbers.length; i++) {
if (numbers[i] == numbers[i + 1] && numbers[i] != numbers[i - 1]) {//判断是否重复,是否已经放入容器
var result = numbers[i];
// console.log(result);
var count = numbers.lastIndexOf(result) - numbers.indexOf(result) + 1;
// console.log(count);
// count 与 result组成键值对 做一个绑定
obj[count] = result
// console.log(obj[count]);
}
}
// 此时对象中的key 是 count
// 先获取到最大的key 与 numbers.length / 2 作比较
// 最终通过key获取value 这样就不会出现错乱了
if (Math.max.apply(null, Object.keys(obj)) >= numbers.length / 2) {
return obj[Math.max.apply(null, Object.keys(obj))];
}
else {
return -1;
}
}
module.exports = {
MoreThanHalfNum_Solution : MoreThanHalfNum_Solution
}; function MoreThanHalfNum_Solution(numbers)
{
function count(num){
let len = numbers.filter(i => i === num);
return len.length;
}
let set = Array.from(new Set(numbers));
let find = set.find(i => count(i) > Math.floor(numbers.length/2))
return find
} function MoreThanHalfNum_Solution(numbers)
{
// write code here
numbers = numbers.sort((a,b) => a -b)
return numbers[Math.floor(numbers.length/2)]
}
module.exports = {
MoreThanHalfNum_Solution : MoreThanHalfNum_Solution
};
function MoreThanHalfNum_Solution(numbers)
{
// write code here
if(!numbers) return 0;
let obj = {};
for(let i=0;i<numbers.length;i++){
if(obj[numbers[i]] && obj[numbers[i]].val == numbers[i]){
obj[numbers[i]].count++;
}else{
obj[numbers[i]] = {
val:numbers[i],
count:1
}
}
}
let index = 0;
for(key in obj){
if(obj[key].count > numbers.length / 2){
index = key;
}
}
return index;
} function MoreThanHalfNum_Solution(numbers)
{
const arr = numbers.join('').split('')
const obj = {}
let result = {}
arr.forEach(e => {
obj[e] = { key: e, count: obj[e] ? obj[e].count : 0 }
if (Object.keys(obj).indexOf(e) > -1) {
obj[e].count = !obj[e].count ? 1 : (obj[e].count + 1)
} else {
obj[e].count = 0
}
})
const counts = Object.values(obj).map(e => e.count)
const max = Math.max.call(null, ...counts)
for (let i in obj) {
if (obj[i].count === max) {
result = obj[i]
}
}
if (result.count > (arr.length / 2)) {
return result.key
} else{
return 0
}
} function MoreThanHalfNum_Solution(numbers)
{
// write code here
//哈希表做法
if(numbers.length == 1){
return numbers[0];
}else{
var arr = Array(numbers.length).fill(0);
for(var j = 0;j<numbers.length;j++){
++arr[numbers[j]];
}
for(var i = 0;i<arr.length;i++){
if(arr[i] > (numbers.length / 2)){
return i;
}
}
return 0;
}
}
function MoreThanHalfNum_Solution(numbers)
{
const lang=numbers.length;
if(numbers.length==0) return 0;
else if(lang==1)return numbers[0];
else if(lang==2)return (numbers[0]===numbers[1])?numbers[0]:0;
var mid=Math.floor(lang/2);
var temp=numbers[0],sum=1;
for(let i=1;i<lang;i++){
if(temp===numbers[i])
sum++;
else{
sum--;
if(sum<0){
temp=numbers[i];
sum=0;
}
continue;
}
if(sum>mid) return temp;
}
return (sum>0)?temp:0;
}
public int MoreThanHalfNum_Solution(int [] array) {
int length=array.length;
if(array==null||length<=0){
return 0;
}
if(length==1){
return array[1];
}
int[] tempArray=new int[length];
for(int i=0;i<length;i++){
tempArray[i]=array[i];
}
for(int i=0;i<length;i++){
//后面需要用零来代表抹除数字,所以对0时做特殊处理
if(tempArray[i]==0){
continue;
}
for(int j=i+1;j<length;j++){
if(tempArray[i]!=tempArray[j]&&tempArray[j]!=0){
tempArray[i]=0;//此处用0代表抹去该数字
tempArray[j]=0;
break;
}
}
}
for(int i=0;i<length;i++){
System.out.println(tempArray[i]);
}
//找出未被抹去的数字
int result=0;
for(int i=0;i<length;i++){
if(tempArray[i]!=0){
result=tempArray[i];
break;
}
}
int times=0;
for(int i=0;i<length;i++){
if(result==array[i]){
times++;
}
}
if(times*2<length){
result=0;
}
return result;
}
}
public int MoreThanHalfNum_Solution(int [] array) {
int length=array.length;
if(array==null||length<=0){
return 0;
}
int result=array[0];
int times=1;
for(int i=1;i<length;i++){
if(times==0){
result=array[i];
times=1;
}else{
if(array[i]==result){
times++;
}else{
times--;
}
}
}
times=0;
for(int i=0;i<length;i++){
if(result==array[i]){
times++;
}
}
if(times*2<length){
result=0;
}
return result;
}
}