数组中出现次数超过一半的数字
题目描述:
数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。
例子:
输入: [1, 2, 3, 2, 2, 2, 5, 4, 2]
输出: 2
解法:
/**
* @param {number[]} nums
* @return {number}
*/
// 循环一遍 借助对象
var majorityElement = function(nums) {
let max=0,maxValue=nums[0];
nums.reduce((prev,curr)=>{
if(!prev[`${curr}`]){
prev[`${curr}`]=1;
}else{
prev[`${curr}`]+=1;
}
max=Math.max(max, prev[`${curr}`]);
if(max===prev[`${curr}`]){
maxValue=curr;
}
return prev;
},{})
return maxValue
};
// 排序--排序之后贪心算法
var majorityElement = function(nums) {
nums.sort((a,b)=>a-b);
const temp=Math.floor(nums.length/2);
for(let i=0;i<nums.length;i++){
if(nums[i]===nums[temp+i]){
return nums[i];
}
}
};
//投票算法
var majorityElement = function(nums) {
let num=0,value=nums[0];
for(let i=0;i<nums.length;i++){
if(num!==0){
if(nums[i]===value){
num++;
}else{
num--;
}
}else{
num=1;
value=nums[i];
}
}
return value;
};