\quad
輸入整數陣列 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]
\quad
這裡給出乙個三路partition的操作,速度最快,可見測試資料中有很多重複元素。
class
solution
int f = arr[
rand()
% n]
;// 隨機取乙個標誌位
vector<
int>
a, b, c;
// 三路partition
for(auto num: arr)
if(a.
size()
>= k)
return
partition
(a, k)
;else
if(a.
size()
+ b.
size()
>= k)
return f;
// 此時第k個數就是答案
else
return
partition
(c, k - a.
size()
- b.
size()
);} vector<
int>
getleastnumbers
(vector<
int>
& arr,
int k)
};
劍指offer 最小k個數
1.題目 輸入n個整數,找出其中最小的k個數。例如輸入4,5,1,6,2,7,3,8這8個數字,則最小的4個數字是1,2,3,4,2.方法 1 基於堆排序演算法,構建最大堆。時間複雜度為o nlogk 2 如果用快速排序,時間複雜度為o nlogn 3 如果用插入排序,時間複雜度為o n 2 3.演...
劍指offer 最小的K個數
華電北風吹 天津大學認知計算與應用重點實驗室 日期 2015 10 4 題目描述 輸入n個整數,找出其中最小的k個數。例如輸入4,5,1,6,2,7,3,8這8個數字,則最小的4個數字是1,2,3,4,解析 基於插入排序的思想可以想到使用乙個長度為k的排序陣列儲存最小的k個元素,複雜度o nk 基於...
《劍指offer》最小的K個數
輸入n個整數,找出其中最小的k個數。例如輸入4,5,1,6,2,7,3,8這8個數字,則最小的4個數字是1,2,3,4,輸入給整數陣列,和k 找出其中最小的k個數 class solution 1 先用插入排序對陣列中數進行排序。2 取出有序陣列中最小的kge。附 這只是乙個比較簡單的方法。如果考慮...