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