leetcode 最小的k個數 使用快速排序

2021-10-08 06:53:35 字數 319 閱讀 8414

class solution

int part(vector& arr,int begin,int end){

int pivot=arr[begin];

int i=begin,j=end;

while(ipivot && i用排序來做的,主要複習一下快速排序,寫乙個分割槽函式part,將陣列在begin-end之間的數按照pivot=arr[begin]左右分開,左邊的都小於arr[begin],右邊的都大於,然後泛化分割槽下標。quick函式中,是乙個遞迴,上來先分割槽,然後根據分割槽id左右各自遞迴排序,遞迴終止條件就是begin>=end,這個時候返回即可。

Leetcode 最小K個數

思路 基於快排改進 選取arr 0 作為基準值,tmp arr 0 排序後,返回tmp的下標index 此時,arr index 左側的值都小於tmp,右側的值都大於tmp。如果k index,那麼從起始點0到下標index 1的值就為最小的k個數,如果k index,說明k個數在區間 0,inde...

Leetcode之 最小的k個數

輸入整數陣列 arr 找出其中最小的 k 個數。例如,輸入4 5 1 6 2 7 3 8這8個數字,則最小的4個數字是1 2 3 4。雜湊表,題目中給定arr.length 10000,arr i 10000,則建立乙個hash陣列記錄每個數字出現的次數,之後從hash 0 開始輸出,若hash i...

最小的K個數

問題描述 給定的n個整數,計算其中最小的k個數。最直觀的解法莫過於將n個數按公升序排列後輸出前k個。但是就效率來看,這種方法並不是最理想的。一種改進方法是借助快速排序中對陣列的劃分,以第k個元素對陣列進行劃分,使得比第k個數字小的數字都在其左邊,比其大的數字都在它的右邊。void swap int ...