好久不切题,c++语法都忘差不多了。。。。。,找几道题练练手
之前的题解放github上了,以后再切题,尽量两边都放吧
部分leetcode的切题题解
- 题目大意:给定数据求前K小
class Solution {
public:
vector<int> GetLeastNumbers_Solution(vector<int> input, int k) {
if(k > input.size() || k == 0 || input.size() == 0 ) return vector<int>();
make_heap(input.begin(),input.begin()+k);
while(k < input.size()){
if(input[k] < input[0]){
input[0] = input[k];
make_heap(input.begin(),input.begin()+k);
}
input.erase(input.begin()+k);
}
return input;
}
};
目前来看,最佳情况也得跑一边全量数据,即复杂度O(n)
我这里其实使用了make_heap和vector.erase 的有点骚的操作。。
make_heap 本质:顺序表换位构成堆,底层仍是顺序表
vector.erase会造成size变化,也会引起迭代器失效,需要小心