java 投票算法_Boyer and Moore Fast majority vote algorithm(快速选举算法)
問題來來自于leetcode上的一道題目,https://leetcode.com/problems/majority-element/,大意是是找出一個數組中,出現次數超過一個半的數字,要求是O(n)的算法。
這道題的解法來自于 ?Boyer-Moore Majority Vote Algorithm ??http://www.cs.utexas.edu/~moore/best-ideas/mjrty/。
算法原理
以下是論文原文的片段
翻譯過來大致是:
假設有一群投票的人,每個人都會投票個某個候選人。為了選擇最終贏的選取的候選人,可以采用這樣的選舉方式:每個投票人找到其他的投票人,并且這個投票人支持的候選不同于自己的支持的候選人,PK過后,這一對投票人同時出局。經過全部的PK之后,那么還沒有出局的投票人支持的候選人,就有可能是最終的選舉勝利者(獲得半數以上的選票)。最后,選舉主席,需要檢查這位可能贏得選舉的候選人的票數,來確認他是否贏得了選舉。
因為leetcode上的題目,已經確認了majority number始終是存在的。那么統計票數的一個步驟實際可以省略了。
算法實現
以下是論文的原文
用java代碼實現是
public int majorityElement(int[] nums) {
int candIndex = -1;
int k = 0;
for ( int i = 0; i < nums.length ; i++) {
if ( k == 0 ){
candIndex = i;
k = 1;
}else{
if ( nums[candIndex] == nums[i]) {
k++;
}else {
k --;
}
}
}
return nums[candIndex];
}
總結
以上是生活随笔為你收集整理的java 投票算法_Boyer and Moore Fast majority vote algorithm(快速选举算法)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java出现errors是什么错误_ja
- 下一篇: protobuf windows jav