劍指Offer系列40 最小的k個數

2021-10-05 23:56:41 字數 805 閱讀 6498

輸入整數陣列 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...