(陣列)眾數問題

2021-09-08 10:55:50 字數 910 閱讀 1501

給一陣列,如果存在眾數,找出眾數,即超過一半的數,如果不存在,返回-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...