中級算法之排序和搜索:前 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;
}

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