中级算法之排序和搜索:前 K 个高频元素

给定一个非空的整数数组,返回其中出现频率前 k 高的元素。

示例 1:

输入: nums = [1,1,1,2,2,3], k = 2
输出: [1,2]

示例 2:

输入: nums = [1], k = 1
输出: [1]

说明:

你可以假设给定的 k 总是合理的,且 1 ≤ k ≤ 数组中不相同的元素的个数。
你的算法的时间复杂度必须优于 O(n log n) , n 是数组的大小。

思路很简单:用map存,key存nums[i],value存频率,然后转入vector中,vector的元素成为了pair对象,自写一个cmp方法,按value的值从大到小排序,然后取出前k个的key。

static bool cmp(pair<int, int> a, pair<int, int> b) {
	return a.second > b.second;
}
vector<int> topKFrequent(vector<int>& nums, int k) {
	vector<int> res;
	unordered_map<int, int> m;
	for (int i = 0; i < nums.size(); i++) {
		m[nums[i]]++;
	}
	vector<pair<int, int>> vec(m.begin(), m.end());
	sort(vec.begin(), vec.end(), cmp);
	for (auto t : vec) {
		if (k == 0) break;
		res.push_back(t.first);
		k--;
	}
	return res;
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章