找到無序陣列中最小的k個數

2021-10-25 04:17:27 字數 1394 閱讀 4586

找到無序陣列中最小的k個數

給定乙個整型陣列arr,找到其中最小的k個數。

輸入描述:

輸入包含兩行,第一行包含兩個整數n和k(1≤

k≤n≤

105)

(1 \leq k \leq n \leq 10^5)

(1≤k≤n

≤105

),代表陣列arr的長度,第二行包含n個整數,代表陣列arr

(1≤a

rri≤

109)

arr(1 \leq arr_i \leq 10^9)

arr(1≤

arri

​≤10

9)。輸出描述:

輸出包含一行,k個整數,代表陣列中最小的k個整數。

示例1輸入

5 3

3 5 1 5 2

輸出
3 1 2
備註:

時間複雜度o(n

log2

k)

o(nlog_2k)

o(nlog

2​k)

和o (n

)o(n)

o(n)

,額外空間複雜度o(n

)o(n)

o(n)

。題解:

如果直接對原陣列排序,複雜度為o(n

log2

n)

o(nlog_2n)

o(nlog

2​n)

,與題目要求不符。我們可以考慮維護乙個大小為 k 的大根堆,對於乙個新的元素,若其小於堆頂元素,則將堆頂元素替換為該元素,並向下調整堆。這樣遍歷完陣列中所有元素後,可以得到最小的 k 個數。時間複雜度為o(n

log2

k)

o(nlog_2k)

o(nlog

2​k)

。o (n

)o(n)

o(n)

的解法很麻煩,暫時跳過。。。

**:

#include

#include

using

namespace std;

const

int n =

100010

;int n, k;

int h[n]

;void

down

(int u )

}int

main

(void)}

for(

int i =

1; i <= k;

++i )

printf

("%d%c"

, h[i]

," \n"

[ i == k ]);

return0;

}

8 4找到無序陣列中最小的k個數

題目 給定乙個無序的整型陣列arr,找到其中最小的k個數。時間複雜度至少為o nlogk 實現public int getminknumsbyheap int arr,int k int kheap newint k 代表目前被選出的k個最小的數 for int i 0 i k i for int ...

無序陣列中最小的k個數

對於乙個無序陣列,陣列中元素為互不相同的整數,請返回其中最小的k個數,順序與原陣列中元素順序一致。給定乙個整數陣列a及它的大小n,同時給定k,請返回其中最小的k個數。測試樣例 1,2,4,3 4,2返回 1,2 簡單題 coding utf 8 class kthnumbers def findkt...

陣列與矩陣 找到無序陣列中最小的k個數

題目 給定乙個無序的整型陣列arr,找到其中最小的k個數。要求 如果陣列arr的長度為n,排序之後自然可以得到最小的k個數,此時時間複雜度與排序演算法的時間複雜度相同,為o nlogn 本題要求讀者實現時間複雜度為o nlogk 和o n 的方法。基本思路 o nlogk 的方法。思路很簡單,就是一...