題目
題目鏈結
輸入整數陣列 arr ,找出其中最小的 k 個數。例如,輸入4、5、1、6、2、7、3、8這8個數字,則最小的4個數字是1、2、3、4。
示例 1:輸入:arr = [3,2,1], k = 2
輸出:[1,2] 或者 [2,1]
示例 2:題解輸入:arr = [0,1,2,1], k = 1
輸出:[0]
根據陣列的前k個數建立乙個大頂堆,對,是大頂堆,然後陣列後面一次更新這個頂堆。
class solution
if(res[i]
>= res[child]
)break
;int tmp = res[i]
; res[i]
= res[child]
; res[child]
= tmp;
i = child;}}
vector<
int>
getleastnumbers
(vector<
int>
& arr,
int k)
// 構建節點個數為k的大頂堆
for(
int i = k /2-
1; i >=
0; i--
)for
(unsigned
int i = k; i < arr.
size()
; i++)}
return res;}}
;
LeetCode 面試題40 最小的k個數
leetcode 面試題40.最小的k個數 輸入整數陣列 arr,找出其中最小的 k 個數。例如,輸入4 5 1 6 2 7 3 8這8個數字,則最小的4個數字是1 2 3 4。示例 1 輸入 arr 3,2,1 k 2 輸出 1,2 或者 2,1 示例 2 輸入 arr 0,1,2,1 k 1 輸...
LeetCode 面試題40 最小的k個數
輸入整數陣列arr,找出其中最小的k個數。例如,輸入4 5 1 6 2 7 3 8這8個數字,則最小的4個數字是1 2 3 4。示例 1 輸入 arr 3,2,1 k 2輸出 1,2 或者 2,1 示例 2 輸入 arr 0,1,2,1 k 1輸出 0 限制 每日打卡,top k問題,複習一下堆排序...
面試題40 最小k個數
題目 輸入n個整數,找出其中最小的k個數 思路 1 如果輸入的陣列可以改變,則基於第k個數來調整,是第k個數左邊的數都小於第k個數,右邊的數都大於第k個數 時間複雜度o n 思路1 void printkminnumberbymethod1 int arr,int length,int k int ...