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. 主要元素

Boyer-Moore 投票算法_数据

 

 

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;
};