数组中出现次数超过一半的数字

87 阅读1分钟

数组中出现次数超过一半的数字

题目描述:

数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。

例子:

输入: [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;
};