第40題 最小的K個數

2021-09-12 08:24:20 字數 1017 閱讀 7872

輸入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;

class

solution

void

quicksort_recur

(vector<

int>

& nums,

int low,

int high)

}int

partition

(vector<

int>

& nums,

int start,

int end)

} left++

;swap

(&nums[left]

,&nums[end]);

//將最尾部的基準放在左子集的下乙個位置

return left;

//返回基準

}int

random

(int min,

int max)

void

swap

(int

*in1,

int* in2)

};

法3.最大堆 onlogk。建立乙個最大堆容器,可以容納k個元素。如果元素陣列的下乙個元素小於堆頂,將堆頂刪除,將該元素插入堆中。

時間複雜度計算:1.找到堆頂並刪除:o(1)。2.插入元素重新排列堆:o(logk)。3.n個元素進行1.2部的操作,所以是o(nlogk)

法4.紅黑樹 multset onlogk

劍指offer第40題 最小的K個數

題目描述 輸入n個整數,找出其中最小的k個數。例如輸入4,5,1,6,2,7,3,8這8個數字,則最小的4個數字是1,2,3,4。示例1輸入 4,5,1,6,2,7,3,8 4返回值 1,2,3,4 對原陣列從小到大排序後取出前 k 個數即可。vector int getleastnumbers v...

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 當陣列的大小較...