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

2021-10-25 05:54:38 字數 1258 閱讀 8531

在陣列中找到出現次數大於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...