1. 程式人生 > 其它 >Boyer-Moore 投票演算法

Boyer-Moore 投票演算法

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