摩爾投票法思路
候選人(cand_num)初始化為nums[0],票數count初始化為1。
當遇到與cand_num相同的數,則票數count = count + 1,否則票數count = count - 1。
當票數count為0時,更換候選人,並將票數count重置為1。
遍歷完陣列後,cand_num即為最終答案。
為何這行得通呢?
投票法是遇到相同的則票數 + 1,遇到不同的則票數 - 1。
且「多數元素」的個數》 ⌊ n/2 ⌋,其餘元素的個數總和<= ⌊ n/2 ⌋。
因此「多數元素」的個數 - 其餘元素的個數總和 的結果 肯定 >= 1。
這就相當於每個「多數元素」和其他元素 兩兩相互抵消,抵消到最後肯定還剩餘至少1個「多數元素」。
無論陣列是1 2 1 2 1,亦或是1 2 2 1 1,總能得到正確的候選人。
class solution {
public int majorityelement(int nums) {
int can_num=nums[0],count=1;
for(int i=1;iif(can_num==nums[i]) count++;
else if(--count==0) {
can_num=nums[i];
count=1;
return can_num;
169 多數元素
解題思路 1.將陣列從小到大排序 2.第nums.length 2處的元素就是我們要求的元素,直接返回nums nums.length 2 即可 實現 class solution 解題思路 1.變數val,初始值為nums 0 記錄當前的值,計數器cnt,記錄當前元素累計出現的情況,初始值為1 2...
169 多數元素
給定乙個大小為 n 的陣列,找到其中的多數元素。多數元素是指在陣列 現次數大於 n 2 的元素。你可以假設陣列是非空的,並且給定的陣列總是存在多數元素。示例 1 輸入 3,2,3 輸出 3 示例 2 輸入 2,2,1,1,1,2,2 輸出 2 分析 解法一 我們可以先排序,然後輸出在陣列 現次數大於...
169 多數元素
題目描述 給定乙個大小為 n 的陣列,找到其中的多數元素。多數元素是指在陣列 現次數大於 n 2 的元素。你可以假設陣列是非空的,並且給定的陣列總是存在多數元素。示例 1 輸入 3,2,3 輸出 3 示例 2 輸入 2,2,1,1,1,2,2 輸出 2 方法1 直接使用unordered map進行...