尋找主元素

2021-06-04 17:40:12 字數 915 閱讀 6934

如果乙個陣列a[1..n]中超過半數的元素都相同時,該陣列被稱為含有主元素。

演算法思想:

利用快速排序的思想,如果這個陣列存在主元素,則它一定為排序後的中位數。但問題是,我們要設計o(n)演算法,我們知道,排序的最優時間複雜度是o(nlogn),所以我們需要借助其他的方法來完成這個問題。

我們可以想到快速排序,當我們調整基準元素時,如果基準元素到達n/2,則說明左邊都比它小,右邊都比它大,這個數肯定就是中位數。我們只需要再遍歷一次陣列,看看陣列中和這個中位數相等的數的個數有幾個就可以了。如果大於n/2,則含有主元素,反之沒有。

時間複雜度為o(nlogn + n)

**如下:

#includeusing namespace std;

int n, mid;

int partition(int arr, int low, int high)

return j; //返回基準元素位置

}void quick_sort(int arr, int low, int high)

}int main()

另一種遞迴:

#includeusing namespace std;

int n;

void quicksort(int arr, int low, int high)

arr[i] = pivot;

if(i > n / 2)

quicksort(arr, low, i - 1); //遞迴左邊

else if(i < n / 2)

quicksort(arr, j + 1, high); //遞迴右邊

else

return ;

}int main()

尋找數列中的主元素

尋找數列中的主元素 已知乙個整數序列,若乙個元素個數m大於元素總個數n的一半,稱為主元素。方法一 線性法 分兩步走 1.選取候選的主元素 依次掃瞄所給陣列中的每個整數,將遇到的第乙個數n儲存在c中,記n出現次數為1,然後接著往後掃瞄,若下個數仍然是n,則次數加一,否則減一,當計數為0時,將遇到的下乙...

python尋找多數元素 尋找多數元素

今天實現的演算法是尋找多數元素,多數元素是指在乙個含有n個元素的序列 現次數多於 n 2 向下取整 的元素。蠻力尋找多數元素是對每個元素進行計數,如果某個元素的計數超過 n 2 則斷言它是多數元素,否則不存在多數元素。這種方法的時間複雜度過高,可以尋找更高效能的演算法解決這類問題。如果乙個序列存在多...

c 學習筆記(36) 利用快排尋找主元素

如果乙個陣列a 1.n 中超過半數的元素都相同時,該陣列被稱為含有主元素。演算法思想 利用快速排序的思想,如果這個陣列存在主元素,則它一定為排序後的中位數。但問題是,我們要設計o n 演算法,我們知道,排序的最優時間複雜度是o nlogn 所以我們需要借助其他的方法來完成這個問題。我們可以想到快速排...