定义
最基本的摩尔投票问题,找出一组数字序列中出现次数大于总数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