最小的k個數

2021-10-20 14:35:18 字數 698 閱讀 8594

力扣位址

小頂堆:

時間複雜度:

空間複雜度:

利用的就是堆排序的性質,只給k個數排序

class solution 

}void headsort(vector& arr, int k, int len)

for (int i = len - 1; i >= len - k; --i)

}vectorgetleastnumbers(vector& arr, int k) ;}};

快速選擇:

時間複雜度:理想狀態

空間複雜度:理想狀態,最壞狀態

快排思想,利用partition 獲取 pivot ,pivot的左邊小於等於arr[pivot],pivot右邊大於等於arr[pivot],而最小的k個數就是左邊都比第k小的數小或者相等

class solution 

arr[low] = pivot;

return low;

}void quickselect(vector& arr, int low, int high, int k)

else if (k < pivot)

else

}vectorgetleastnumbers(vector& arr, int k) ;}};

最小的K個數

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

最小的K個數

從 陣列中出現次數超過一半的數字 得到啟發,同樣可以基於partition函式來解決。一 o n 演算法 void getleastnumbers int input,int n,int output,int k else for int i 0 i k i output i input i 二 o...

最小的K個數

輸入n個整數,找出其中最小的k個數。例如輸入4,5,1,6,2,7,3,8這8個數字,則最小的4個數字是1,2,3,4,如果不讓使用sort的話,自己實現乙個,或者依次選取最小的 class solution public vectorgetleastnumbers solution vectori...