在陣列中找到出現次數大於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≤a
rri≤
109)
arr(1 \leq arr_i \leq 10^9)
arr(1≤
arri
≤10
9)。輸出描述:
輸出所有出現次數大於n/k的數,如果沒有這樣的數,請輸出」-1「。
示例1輸入
7 7
1 2 3 1 2 3 4
輸出1 2 3
示例2
輸入
4 1
1 1 2 3
輸出-1
備註:
時間複雜度o(n
)o(n)
o(n)
,額外空間複雜度o(k
)o(k)
o(k)
。題解:
參考 在陣列中找到出現次數大於一半的數,在本題中,我們每次刪除 k 個不同的元素,直到剩餘的元素種類不足 k ,最終保留下來的一定是出現次數超過 n/k 的元素。
**:
#include
#include
using
namespace std;
const
int n =
100010
;int n, k;
int a[n]
;unordered_map<
int,
int> hash;
intmain
(void)}
else hash[ a[i]]=
1;}}
k = n / k;
bool flag =
false
;for
(int i =
0; i < n;
++i )}if
(!flag )
return0*
puts
("-1");
return0;
}
在陣列中找到出現次數大於N K的數
題目 給定整數陣列arr,列印其 現次數大於一半的數,如果沒有這樣的數,列印提示資訊。高階問題 給定整數陣列arr,列印其 現次數大於n k的數,如果沒有這樣的數,列印提示資訊。要求 原問題要求時間複雜度o n 空間複雜度o 1 高階問題要求時間複雜度o n k 額外空間o k 解答 核心思路 一次...
在陣列中找到出現次數大於一半的數
在陣列中找到出現次數大於一半的數 給定乙個整型陣列arr,請列印其 現次數大於一半的數,如果沒有這樣的數,請輸出 1。輸入描述 輸入包含兩行,第一行包含乙個整數n 1 n 1 05 n 1 leq n leq 10 5 n 1 n 105 代表陣列長度,第二行包含n個數,代表陣列arr 1 a rr...
在陣列中找到出現頻率大於1 4的數
演算法的核心思想很簡單,每次刪去不同的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...