輸入整數陣列 arr ,找出其中最小的 k 個數。例如,輸入4、5、1、6、2、7、3、8這8個數字,則最小的4個數字是1、2、3、4。
python
class
solution
:def
getleastnumbers
(self, arr: list[
int]
, k:
int)
-> list[
int]
:if k==0:
return
list()
hp =
[-x for x in arr[
:k]]
# 準備建立最大堆,負號因為後面呼叫堆的方法彈出最小值
heapq.heapify(hp)
# 將列表轉換為堆
# 遍歷列表剩餘元素,最後堆中留下的就是那k個最小值
for i in
range
(k,len
(arr)):
if-hp[0]
> arr[i]
:# 堆頂元素大於待插入元素
# 彈出堆內最小值
-arr[i]
)# 壓入待插入元素的相反數
res =
[-x for x in hp]
return res
c++class
solution
}for
(int m=
0; m++m)
return vec;}}
;
劍指Offer系列40 最小的K個數
輸入整數陣列arr,找出其中最小的 k 個數。例如,輸入4 5 1 6 2 7 3 8這8個數字,則最小的4個數字是1 2 3 4。方法一 排序 class solution return vec 方法二 堆 class solution priority queue int q for int i...
劍指offer40 最小的k個數
輸入n個整數,找出其中最小的k個數。注意 資料保證k一定小於等於輸入陣列的長度 輸出陣列內元素請按從小到大順序排序 樣例 輸入 1,2,3,4,5,6,7,8 k 4 輸出 1,2,3,4 思路1 用大頂堆儲存k個數,然後不斷的遍歷陣列,若是陣列中的數小於堆頂元素,則替換。實踐複雜度為o nlogk...
劍指offer40 最小的 K 個數
題目描述 輸入n個整數,找出其中最小的k個數。例如輸入4,5,1,6,2,7,3,8這8個數字,則最小的4個數字是1,2,3,4,思路 方法一 維護乙個大小為k的大頂堆,複雜度 o nlogk o k 特別適合處理海量資料 public class solution priorityqueuemax...