partition演算法 主元素問題 分治

2021-10-06 22:02:26 字數 760 閱讀 5295

主元素是一組n個數**現次數大於n/2的數。

求乙個陣列中的主元素。

取陣列中的乙個數,將陣列分成兩部分(比它大和比它小),再接著在子問題中求解。這是乙個常用的演算法(以後還會補充)。

#include

#include

#include

using

namespace std;

int n;

intmode

(int

* array,

int l,

int r,

int n)

while

(i>pivot)

if(i(i == j && array[j]

== pivot)

++c;

//pivot出現次數加1

if(i == j && array[j]

>pivot)

if(c >= n/2)

return pivot;

if(j-l+

1>=n/2)

//小於pivot的個數大於等於一半,在左半部分找

return

mode

(array,l,j,n)

;return

mode

(array,j+

1,r,n)

;//在右半部分找

}int

main()

/*61 2 2 2 3 2

*/

主元素問題

主元素 majority number 定義為陣列中出現次數嚴格超過一半的數。找到這個數。要求使用o 1 的額外空間和o n 的時間。初階 有n個數,其中乙個數的出現次數嚴格超過了一半。求這個數。高階1 有n個數,其中兩個數的出現次數都超過了 求這兩個數。高階2 有n個數,其中乙個數的出現次數嚴格超...

主元素問題

設a是含有n個元素的陣列,如果元素x在a中出現的次數大於n 2,則稱x是a的主元素。給出乙個演算法,判斷a中是否存在主元素。因為主元素的個數大於n 2,如果兩個不同的元素兩兩抵消,最後若完全抵消,那麼就不存在主元素 若沒有完全抵消,那麼餘下的元素可能就是主元素,因此統計該元素的出現次數,即可判定是否...

主元素問題

主元素問題歡迎來到二陽的學習課堂,咱們先看一看問題描述 1.問題分析 當長度為n的序列a 現次數大於n 2的元素,則此元素為主元素。設主元素出現k次,則其他元素出現次數為n k 二者之差為c 2k n 但c 0時,主元素成立。2.演算法設計 從序列a前端開始遍歷,初始化主元素a a 0 計算遍歷過程...