剑指Offer-数组-数组中出现次数超过一半的数字
题目
数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。
思路
- 通过Object对象来保存数字出现的次数
- 如果出现次数大于数组长度的一半,返回该数字,否则返回0
代码
function MoreThanHalfNum_Solution(numbers) {
let len = numbers.length/2; //数组的一半长度
let obj = {};
for (let i = 0; i < numbers.length; i++) {
if (!obj[numbers[i]]) { //首次遍历到
obj[numbers[i]] = 1;
}
else {
obj[numbers[i]]++; //次数加1
}
if(obj[numbers[i]]>len){
return numbers[i];
}
}
return '0';
}