劍指 Offer 40 最小的k個數 快排 堆

2021-10-09 23:20:22 字數 1379 閱讀 2344

劍指 offer 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]

限制:

解題思路 優先佇列 快排

class

solution

// 預設是小根堆 實現大根堆 需要重寫一下比較器

queue

pq =

newpriorityqueue

<

>

((v1,v2)

->v2-v1)

;for

(int num:arr)

else}}

// 返回堆中的元素

int[

] res =

newint

[pq.

size()

];int idx =0;

for(

int num:pq)

return res;

}}

快排

class

solution

// 表示要我們要找的是下標為k-1的數

return

quicksearch

(arr,

0,arr.length-

1,k-1)

;}private

int[

]quicksearch

(int

nums,

int lo,

int hi,

int k)

return j>k?

quicksearch

(nums,lo,j-

1,k)

:quicksearch

(nums,j+

1,hi,k);}

private

intpartition

(int

nums,

int lo,

int hi)

int t = nums[j]

; nums[j]

=nums[i]

; nums[i]

=t;}

nums[lo]

=nums[j]

; nums[j]

=v;return j;

}}

劍指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...

劍指offer40 最小的k個數

問題描述 輸入n個整數,找出其中最小的k個數。例如輸入4,5,1,6,2,7,3,8這8個數字,則最小的4個數字是1,2,3,4,方法1 o nlogn def getleastnumbers input,k input.sort return input 4 a sorted input inpu...