c語言實現找出陣列中出現次數最多的元素

2021-09-18 05:53:24 字數 857 閱讀 1028

這道題的**是一年的統考考研資料結構題,我還找了半天,沒找到是哪一年的。然後這個的話,我看了一下答案感覺他那個思路不是很好理解,然後我就看到了這個思路,發現思路得很好,值的積累。

??這裡的話就是重新建立了乙個新的陣列b,將其置為0,掃瞄一遍原陣列a,如果比如原陣列為,當掃瞄第乙個的時候,在b陣列第三個位置的下標加一,也就是b[3] = 1;以此類推,到最後b[2] = 2 b[3] = 2 b[4] = 4 b[6] = 1 ,此時掃瞄一下b陣列,找出值最大的,即為願陣列**現次數最多的元素。

下面的演算法實現了找到最多的元素,然後,判斷是否次數大於陣列總元素的一半,如果大於就找到了,不大於,就沒找到

#include#define max 10

#define true 1

#define false 0

//怎樣過濾掉陣列中的0

//找乙個陣列**現次數最多的元素,並判斷是否大於總元素一半多

void find_more(int a,int n)

; for(int i = 0; i < n ; i++)

for(int j = 0; j < max ; j++) }

if(times > n/2)

printf("存在%d,次數為:%d\n", max,times);

else

printf("不存在\n");

找出陣列中出現次數超過一半的數

分析 最直接的方法,對陣列中所有的數排序,然後再掃瞄一遍,統計各個數出現的次數。如果某個數出現的次數超過一半,則輸出這個數。演算法的時間複雜度是o n log 2n n 如果每次刪除兩個不同的數,那麼,在剩下的數字裡,超過一半的數的個數一樣超過了50 不斷重複這個過程,最後剩下的即 為所求。無需避免...

找出陣列中出現次數超過一半的數字

題目 陣列中有乙個數字出現的次數超過了陣列長度的一半,找出這個數字。解法1 將陣列利用快速排序進行排序,因為陣列中有乙個數字出現的次數超過了陣列長度的一半,則排序以後直接取得最中間的那個數字即可!時間複雜度為 o n logn 因為時間主要花費在快速排序上面了!public static int f...

c 找出序列中出現得最頻繁的值

題目要求 編寫乙個函式模板,接受表示未知型別迭代器的一對值,找出在序列中出現的最頻繁的值。自己寫的 沒有考慮存在出現次數最多且相同的情況,也就是預設輸出第一次最多的數值。include include include using namespace std 找到容器中出現次數最多的值 templat...