找到無序陣列中最小的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
2k)
和o (n
)o(n)
o(n)
,額外空間複雜度o(n
)o(n)
o(n)
。題解:
如果直接對原陣列排序,複雜度為o(n
log2
n)
o(nlog_2n)
o(nlog
2n)
,與題目要求不符。我們可以考慮維護乙個大小為 k 的大根堆,對於乙個新的元素,若其小於堆頂元素,則將堆頂元素替換為該元素,並向下調整堆。這樣遍歷完陣列中所有元素後,可以得到最小的 k 個數。時間複雜度為o(n
log2
k)
o(nlog_2k)
o(nlog
2k)
。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 的方法。思路很簡單,就是一...