劍指40 最小的K個數 快排 利用紅黑樹

2021-08-19 09:43:05 字數 672 閱讀 5368

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

方法1:紅黑樹 插入、刪除、查詢o(logk) 整體時間o(nlogk)

遍歷輸入,用multiset儲存最小的k個數,一旦其中存入k個數後就對頭部進行比較 完成插刪

不更改輸入的內容,適合海量資料

typedef multiset> intms;   //從根節點開始刪除 最大值在最初位置

typedef multiset>::iterator intmsiter;

class solution }}

for(intmsiter j=res.begin();j!=res.end();j++)

return result;

}vectorgetleastnumbers_solution(vectorinput, int k)

};

方法2:使用快排 o(n) 當快排返回k-1時完成前k個的排序

class solution 

else

}for(int i=0;ireturn result;

}};

劍指 Offer 40 最小的k個數 快排 堆

劍指 offer 40.最小的k個數 輸入整數陣列 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 示例 2 輸入 arr 0,1,2,1 k 1 輸出 0...

劍指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...