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