40 最小的k個數

2021-10-22 22:30:04 字數 1613 閱讀 8932

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

//queuequeue=new priorityqueue<>((v1, v2) -> v2 - v1);

priorityqueue

<

integer

>

queue =

newpriorityqueue

<

integer

>

(new

comparator

<

integer

>()

});//遍歷陣列加入堆

for(

int x:arr)

else

if(xpeek()

)}//將堆中元素移到陣列

int[

] res=

newint

[k];

int index=0;

for(

int x:queue)

return res;

}}

class

solution

// 最後乙個引數表示我們要找的是下標為k-1的數

return

quicksearch

(arr,

0, arr.length -

1, k -1)

;}private

int[

]quicksearch

(int

arr,

int l,

int r,

int p)

return j>p?

quicksearch

(arr,l,j-

1,p)

:quicksearch

(arr,j+

1,r,p);}

//hoare法

private

intparation

(int

arr,

int l,

int r)

while

(i<=key)

int tmp=arr[i]

; arr[i]

=arr[j]

; arr[j]

=tmp;

} arr[l]

=arr[i]

; arr[i]

=key;

//存在k==0條件的判斷返回i或j均可

//不存在k==0條件的判斷只能返回j返回i會棧溢位

return j;

}}

40 最小的K個數

輸入n個整數,找出其中最小的k個數。例如,輸入4,5,1,6,2,7,3,8這8個數字,則最小的4個數字是1,2,3,4.通過快速排序,每次確定基準資料的位置,根據快速排序的特性,位置左側的資料均小於基準資料,位置右側的資料均大於資料,直至該位置等於k 1時,左邊的資料恰好是最小的k個數。如下 pu...

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 限制 分情況討論 1 當陣列的大小較...

第40題 最小的K個數

輸入n個整數,找出其中最小的k個數。例如輸入4,5,1,6,2,7,3,8這8個數字,則最小的4個數字是1,2,3,4,法1,std sort。快排onlogn class solution return ret 法2.partiton on include using namespace std ...