题解 | #最小的K个数#

最小的K个数

https://www.nowcoder.com/practice/6a296eb82cf844ca8539b57c23e6e9bf

class Solution {
public:
    vector<int> GetLeastNumbers_Solution(vector<int> input, int k) {
        vector<int> res;	// 创建储存结果的数组
	  // map数据结构会根据键的大小自动排序
	  // 键:input内的元素	值:对应元素出现的次数
        map<int,int> mp;
	  // 将input中的元素加入到mp中,
        for(int i = 0; i < input.size(); ++i){
            mp[input[i]]++;
        }
	  // 依次从mp中取键值对,此时根据键的大小已经排好序了
        for(auto it : mp){
		  // 当res的大小比k小时,进入while循环,往res中加数据
            while(res.size() < k){
			  // 对应的键加几次进去res,取决于对应的值
                for(int i = 0; i < it.second; ++i){
                    res.push_back(it.first);
                    if(res.size() == k) break;	// 每加进一个数据,判断res的大小跟k的大小,res的大小等于k,则直接跳出循环
                }
                break;	// 跳出while循环,避免反复往res中加入相同的值
            }
        }
        return res;
    }
};

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务