劍指 Offer 40 最小的k個數

2021-10-19 23:06:45 字數 1127 閱讀 2377

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

示例 1:

輸入:arr = [0,1,2,1], k = 1

輸出:[0]

時間複雜度:o(nlogn)

空間複雜度:最好(平均)為o(logn),最差(完全倒序)為o(n)

class solution 

//令nums[l]為基準, 哨兵為i, j

void quicksort(vector& nums,int l,int r)

swap(nums[i],nums[j]);

}swap(nums[l],nums[i]);

quicksort(nums,l,i-1);

quicksort(nums,i+1,r);

}};

根據快速排序原理,如果某次哨兵劃分後 基準數正好是第 k+1小的數字 ,那麼此時基準數左邊的所有數字便是題目所求的 最小的 k 個數 。

時間複雜度:o(n)

空間複雜度:o(logn)

class solution 

void quicksort(vector& nums,int l,int r,int k)

swap(nums[i],nums[j]);

}swap(nums[l],nums[i]);

if(i==k) return;

if(i>k) quicksort(nums,l,i-1,k);

if(igetleastnumbers(vector& arr, int k) ;

vectorans;

priority_queuemax_heap;

for(int i = 0;i < k; i++)

for(int i = k; i < arr.size(); i++)

}for(int i= 0;ireturn ans;

}};

劍指offer40 最小的k個數

輸入n個整數,找出其中最小的k個數。注意 資料保證k一定小於等於輸入陣列的長度 輸出陣列內元素請按從小到大順序排序 樣例 輸入 1,2,3,4,5,6,7,8 k 4 輸出 1,2,3,4 思路1 用大頂堆儲存k個數,然後不斷的遍歷陣列,若是陣列中的數小於堆頂元素,則替換。實踐複雜度為o nlogk...

劍指offer40 最小的 K 個數

題目描述 輸入n個整數,找出其中最小的k個數。例如輸入4,5,1,6,2,7,3,8這8個數字,則最小的4個數字是1,2,3,4,思路 方法一 維護乙個大小為k的大頂堆,複雜度 o nlogk o k 特別適合處理海量資料 public class solution priorityqueuemax...

劍指offer40 最小的k個數

問題描述 輸入n個整數,找出其中最小的k個數。例如輸入4,5,1,6,2,7,3,8這8個數字,則最小的4個數字是1,2,3,4,方法1 o nlogn def getleastnumbers input,k input.sort return input 4 a sorted input inpu...