在陣列中找到出現頻率大於1 4的數

2021-07-05 08:28:10 字數 1042 閱讀 1114

演算法的核心思想很簡單,每次刪去不同的4個數,最後剩下的元素有可能是頻繁項。

假設陣列有15個元素,若乙個元素的出現頻率大於1/4,其必須出現4次。不妨設陣列為,d表示刪去該數。我們來模擬一下演算法的過程。

第一次 1d,2d,1,4d,1,4,2,9d,1,7,4,3,9,4,3 剩下 1,1,4,2,1,7,4,3,9,4,3

第二次 1d,1,4d,2d,1,7d,4,3,9,4,3 剩下 1,1,4,3,9,4,3

第三次 1d,1,4d,3d,9d,4,3 剩下 1,4,3

那麼 1,4,3 即為候選頻繁項

對 1,4,3 逐個進行檢驗,統計其再陣列中出現的次數,若其超過出現頻率閾值,則輸出。

**如下:

#include using namespace std;

#define array_size 15

#define result_num 3 //陣列中出現頻率的大於1/(result_num+1)

int gl_array[array_size] = ;//給定的數字集合

struct result

;int getemptyeleminresult(result r, int iarraylength)

} return -1;

}int getnumberposinresult(int inumber, result r, int iarraylength)

} return -1;

}int main(int argc, char** argv)

for (i = 0; i < array_size; i++)

else//不在候選中

else

}} }

//test the result in the array

for (i = 0; i < result_num; i++)

}if (itemp > array_size / (result_num+1))//出現次數大於閾值

}} return 0;

}

在陣列中找到出現次數大於N K的數

題目 給定整數陣列arr,列印其 現次數大於一半的數,如果沒有這樣的數,列印提示資訊。高階問題 給定整數陣列arr,列印其 現次數大於n k的數,如果沒有這樣的數,列印提示資訊。要求 原問題要求時間複雜度o n 空間複雜度o 1 高階問題要求時間複雜度o n k 額外空間o k 解答 核心思路 一次...

在陣列中找到出現次數大於n k的數

在陣列中找到出現次數大於n k的數 給定乙個整型陣列arr,再給定乙個整數k,列印所有出現次數大於n k的數,如果沒有這樣的數,請列印 1 輸入描述 輸入包含兩行,第一行輸入包含兩個整數n和k 1 k n 105 1 leq k leq n leq 10 5 1 k n 105 第二行包含n個整數,...

在陣列中找到出現次數大於一半的數

在陣列中找到出現次數大於一半的數 給定乙個整型陣列arr,請列印其 現次數大於一半的數,如果沒有這樣的數,請輸出 1。輸入描述 輸入包含兩行,第一行包含乙個整數n 1 n 1 05 n 1 leq n leq 10 5 n 1 n 105 代表陣列長度,第二行包含n個數,代表陣列arr 1 a rr...