Boyer-Moore 投票演算法
阿新 • • 發佈:2021-10-01
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; };