Boyer-Moore 投票算法的基本思想是:
在每一轮投票过程中,从数组中删除两个不同的元素,直到投票过程无法继续,此时数组为空或者数组中剩下的元素都相等。
如果数组为空,则数组中不存在主要元素;
如果数组中剩下的元素都相等,则数组中剩下的元素可能为主要元素。
Boyer-Moore 投票算法的步骤如下:
1.维护一个候选主要元素candidate 和候选主要元素的出现次数count,初始时candidate 为任意值,count=0;
2.遍历数组nums 中的所有元素,遍历到元素 x 时,进行如下操作:
(1)如果count=0,则将 x 的值赋给candidate,否则不更新candidate 的值;
(2)如果x=candidate,则将count 加1,否则将count 减 1。
3.遍历结束之后,如果数组nums 中存在主要元素,则candidate 即为主要元素,否则candidate 可能为数组中的任意一个元素。
leetcode面试题 17.10. 主要元素
var majorityElement = function(nums) { let candidate = -1; let count = 0; for (const num of nums) { if (count === 0) { candidate = num; } if (num === candidate) { count++; } else { count--; } } count = 0; const length = nums.length; for (const num of nums) { if (num === candidate) { count++; } } return count * 2 > length ? candidate : -1; };