眾數問題(遞迴 分治)

2021-08-10 23:40:46 字數 659 閱讀 4060

所謂眾數,就是對於給定的含有n個元素的多重集合,每個元素在s中出現次數最多的成為該元素的重數,

多重集合s重的重數最大的元素成為眾數。例如:s=,則多重集s的眾數是2,其重數為3。

現在你的任務是:對於給定的由m個自然數組成的多重集s,計算出s的眾數及其重數。

解題思路:

(1)快速排序

(2)求中位數

(3)計算出中位數的最左端和最右端的位置,然後分割成2段陣列

(4)中位數個數與左端個數比較,中《左 即最大眾數可能存在左端,將左端再進行2段分割(遞迴)直到 中 > 左為止。 右端同理。。。

#includeusing namespace std;

const int maxn = 1e2+5;

int num , val,n;

int a[maxn];

void find(int &l,int &r,int id)

void solve(int l,int r)

if(i - l > num)

solve(l,i-1);

if(r - j > num)

solve(j+1,r);

return ;

}int main()

return 0;

}

眾數問題(遞迴分治策略)

所謂眾數,就是對於給定的含有n個元素的多重集合,每個元素在s中出現次數最多的成為該元素的重數,多重集合s重的重數最大的元素成為眾數。例如 s 則多重集s的眾數是2,其重數為3。現在你的任務是 對於給定的由m個自然數組成的多重集s,計算出s的眾數及其重數。解題思路 1 快速排序 2 求中位數 3 計算...

分治演算法 眾數問題

problem description 給定含有n個元素的多重集合s,每個元素在s 現的次數稱為該元素的重數。多重集s中重數最大的元素稱為眾數。例如,s 多重集s的眾數是2,其重數為3。對於給定的由n 個自然數組成的多重集s,計算s的眾數及其重數。如果出現多個眾數,請輸出最小的那個。input 輸入...

眾數問題 分治演算法

給定含有n個元素的多重集合s,每個元素在s 現的次數稱為該元素的重數。多重集s中重數最大的元素稱為眾數。例如,s 多重集s的眾數是2,其重數為3。對於給定的由n 個自然數組成的多重集s,計算s的眾數及其重數。如果出現多個眾數,請輸出最小的那個。input 輸入資料的第1行是多重集s中元素個數n n ...