投票算法

定义

最基本的摩尔投票问题,找出一组数字序列中出现次数大于总数1/2的数字(并且假设这个数字一定存在)。显然这个数字只可能有一个。摩尔投票算法是基于这个事实:每次从序列里选择两个不相同的数字删除掉(或称为“抵消”),最后剩下一个数字或几个相同的数字,就是出现次数大于总数一半的那个。

example

leetcode 169 题

问题:

给定一个大小为 n 的数组,找到其中的多数元素。多数元素是指在数组中出现次数大于 ⌊ n/2 ⌋ 的元素。
你可以假设数组是非空的,并且给定的数组总是存在多数元素。

答案:
 majorityElement(nums) {
    let arr = nums[0],
        count = 1;
    for (let i = 1, len = nums.length; i < len; i++) {
        if (count == 0) {
            arr = nums[i];
        }
        if (arr == nums[i]) {
            count++;
        } else {
            count--;
        }
    }
    return arr;
};

参考

更加详细的讲解请参考:https://www.zhihu.com/question/49973163

你可能感兴趣的:(投票算法)