给一个长度为 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;
}
}