题解 | #最小的K个数#
最小的K个数
http://www.nowcoder.com/practice/6a296eb82cf844ca8539b57c23e6e9bf
class Solution { public: vector GetLeastNumbers_Solution(vector input, int k) { vector ret; int length=input.size(); if(length==0 or k==0) return ret; ret.push_back(input[0]); //两部分其实一样,看懂这部分基本就会写了 搞个列表,大的放前面, //每次新的值过来,如果比最大的小,那删除前面第一个,找到新值位置放入 for(int i=1;i<k;i++){ if(input[i]>=ret[0]) ret.insert(ret.begin(),input[i]); else if(input[i]<=ret[ret.size()-1]) ret.push_back(input[i]); else { for(int j=ret.size()-1;j>=0;j--){ if(ret[j]>=input[i]) {ret.insert(ret.begin()+j+1,input[i]);break;} } } } //剔除更新 直接用的上面的,觉得不美观的自己整理一下,哈哈,我去下一道题了。 for(int i=k;i<length;i++){ if(input[i]<ret[0]) { //找地方放入 ret.erase(ret.begin()); if(ret.size()){ if(input[i]>=ret[0]) ret.insert(ret.begin(),input[i]); else if(input[i]<=ret[ret.size()-1]) ret.push_back(input[i]); else { for(int j=ret.size()-1;j>=0;j--){ if(ret[j]>=input[i]) {ret.insert(ret.begin()+j+1,input[i]);break;} } } }else{ // ret.push_back(input[i]); } }
}
return ret;
}
};