摩尔投票法

68 阅读1分钟

对应leetcode169题多数元素的一种算法实现

题目描述:

给定一个大小为 n 的数组 nums ,返回其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。

你可以假设数组是非空的,并且给定的数组总是存在多数元素。

示例 1:

输入: nums = [3,2,3]
输出: 3

思路:

因为该元素出现的次数大于 ⌊ n/2 ⌋所以出现次数一定大于其它数出现次数的和

  1. 定义一个候选数和他出现的次数(count)(如nums[0]和1)
  2. 遍历nums数组剩余的所有元素,通过对比当前元素与初始数的值,若相等则令次数+1,不等则+1,同时在判断之前对count进行判断,如果count为0则将当前值赋值给候选数
  3. 遍历完之后,候选数即为最终需要的结果

代码实现:

var majorityElement = function(nums) {
    let count = 1
    let curMax = nums[0]
    for(let i = 1; i<nums.length;i++) {
    // 先判断
        if(count ===0){
            curMax = nums[i]
        }
    // 判断当前元素和候选数
        if(nums[i]===curMax){
            count++
        }else{
            count--
        }
    }
    return curMax
};