給一陣列,如果存在眾數,找出眾數,即超過一半的數,如果不存在,返回-1.
眾數:眾數出現的次數大於其他所有數出現次數之和
通過遍歷陣列,將陣列每個數都通過hashmap來統計其出現的個數,如果某個數個數超過一半,則為眾數。
時間空間複雜度均為o(n)
眾數存在的情況下,每次扔掉兩個不同的數,眾數不變,最終剩下的數一定是眾數。
時間複雜度o(n),空間複雜度o(1)
#include #include#include
#include
using
namespace
std;
class
solution
return -1
; }
//moore voting algorithm
int majorityelement2(vector &num)
else
if(x==num[i])
++count;
else
--count;
}count=0
;
for(int i=0;i)
if(count>floor(n/2
))
return
x;
else
return -1
; }
};int
main()
;
int n=sizeof(a)/sizeof(a[0
]); vector
nums(a,a+n);
solution s;
cout
cout
return0;
}
陣列的眾數問題的分治解法
問題描述 給定含有n個元素的多重集合s,每個元素在s中出現的次數稱為該元素的重數。多重集s中重數最大的元素稱為眾數。例如,s 多重集s的眾數是2,其重數為3。程式設計任務 對於給定的由n個自然數組成的多重集s,程式設計計算s的眾數及其重數。資料輸入 輸入資料由檔名為input.txt的文字檔案提供。...
演算法 眾數問題
眾數問題 description 給定含有n個元素的多重集合s,每個元素在s中出現的次數稱為該元素的重數。多重 集s中重數最大的元素稱為眾數。例如,s 多重集s的眾數是2,其重數為3。程式設計任務 對於給定的由n 個自然數組成的多重集s,程式設計計算s 的眾數及其重數。input 輸入資料第1行多重...
眾數問題分析
問題描述 給定乙個陣列,找出其中出現次數最多的那個元素 即眾數 核心思想 普遍的解決思路。如果我們將所有元素的出現次數進行統計,並從中找出次數中的最大值,那麼,這個最大值對應的元素就是眾數。從這一思想出發,我總結出以下兩種演算法 演算法1 利用排序演算法統計 演算法2 利用陣列或雜湊表統計 演算法1...