数组中出现次数超过一半的数字
题目描述
数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。
题目分析
思路(一)
function MoreThanHalfNum_Solution(numbers)
{
// write code here
let len=numbers.length;
var map=new Map();
for(let c of numbers){
if(map.has(c)){
map.set(c,map.get(c)+1);
}else{
map.set(c,1);
}
}
for(let c of map.keys()){
if(map.get(c)>len/2){
return c;
}
}
return 0;
}
思路(二)
function MoreThanHalfNum_Solution(numbers)
{
// write code here
var count={};
let len=numbers.length;
numbers.forEach(function(val){
if(count[val]){
count[val]++
}else{
count[val]=1;
}
});
for (var i in count){
if(count[i]>Math.floor(len/2)){
return i;
}
}
return 0;
}
思路(三)
function MoreThanHalfNum_Solution(numbers)
{
// write code here
var arr = [],
len = numbers.length,
a;
for(var i = 0; i < len; i++){
a = numbers[i];
if(arr[a]){
arr[a]++;
}else{
arr[a] = 1;
}
}
for(var i = 0; i < arr.length; i++){
if(arr[i] > len/2){
return i;
}
}
return 0;
}