劍指Offer JZ29 最小的K個數 C 實現

2021-10-09 19:08:11 字數 955 閱讀 9254

輸入n個整數,找出其中最小的k個數。例如輸入4,5,1,6,2,7,3,8這8個數字,則最小的4個數字是1,2,3,4。

1、思路:直接對陣列進行排序,然後返回前k個元素。

2、**:

class solution 

};

3、複雜度:

時間複雜度:o(

空間複雜度:o(1)。

1、思路:開乙個長度為k的優先佇列,初始化為陣列前k個元素,優先佇列預設是大頂堆,佇列內元素從大到小排序,大元素優先出隊,元素在入隊的過程中會自動排好序。然後就可以開始遍歷陣列:

遍歷完陣列所有元素後,優先佇列裡的k個元素就是陣列中最小的k個元素。

2、**:

class solution  else }}

for (i = k - 1; i >= 0; i--)

return ret;}};

3、複雜度:

時間複雜度:o(

空間複雜度:o(k)。

1、思路:利用快速排序思想,比較每次劃分使用的基準數和第k小元素的關係來求解。

2、**:

class solution 

vectorquicksort(vector& input, int k, int l, int r)

swap(input[i], input[l]);

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

if (i < k) return quicksort(input, k, i+1, r);

vectorret(input.begin(), input.begin()+k);

return ret;}};

3、複雜度:

時間複雜度:o(n);

空間複雜度:o(

劍指Offer (29)最小的k個數

題目描述 輸入n個整數,找出其中最小的k個數。例如輸入4,5,1,6,2,7,3,8這8個數字,則最小的4個數字是1,2,3,4。實現如下 測試用例中給出的返回值是有序的。嘖嘖。找到序列中最小的k個數,利用set,對數字進行insert或erase 紅黑樹中查詢 插入 刪除操作都為 o logk 最...

劍指offer 29 最小的K個數

題目 輸入n個整數,找出其中最小的k個數。例如輸入4,5,1,6,2,7,3,8這8個數字,則最小的4個數字是1,2,3,4,思路分析 簡單思路 先快排,再取數 coding utf 8 class solution def getleastnumbers solution self,tinput,...

劍指offer 29 最小的K個數

輸入n個整數,找出其中最小的k個數。例如輸入4,5,1,6,2,7,3,8這8個數字,則最小的4個數字是1,2,3,4。最簡單容易想到的就是先排序,然後輸出前k個數即可。但是這樣明顯時間複雜度比較高。也可以使用另外的方法,具體不再詳述。class solution for int i 0 i inp...