leetcodeブラシ問題、まとめ、記録、メモ347
1348 ワード
leetcode347Top K Frequent Elements
Given a non-empty array of integers, return the k most frequent elements.
For example, Given
Note:
You may assume k is always valid, 1 ≤ k ≤ number of unique elements.
Your algorithm's time complexity must be better than O(n log n), where n is the array's size.
Subscribe to see which companies asked this question
まずmapを使って、数字ごとに現れる回数を記録して、それから1つのmultimapを使って、数字の出現回数をキーにして、数字の値を値にして、multimapを挿入して、それからしっぽからk個取って、それでいいです.やはり簡単です.
Given a non-empty array of integers, return the k most frequent elements.
For example, Given
[1,1,1,2,2,3]
and k = 2, return [1,2]
. Note:
You may assume k is always valid, 1 ≤ k ≤ number of unique elements.
Your algorithm's time complexity must be better than O(n log n), where n is the array's size.
Subscribe to see which companies asked this question
まずmapを使って、数字ごとに現れる回数を記録して、それから1つのmultimapを使って、数字の出現回数をキーにして、数字の値を値にして、multimapを挿入して、それからしっぽからk個取って、それでいいです.やはり簡単です.
class Solution {
public:
vector<int> topKFrequent(vector<int>& nums, int k) {
map<int, int> mp;
multimap<int, int> mp_o;
for (int i = 0; i < nums.size(); ++i)
{
mp[nums[i]]++;
}
map<int, int>::iterator it = mp.begin();
for (; it != mp.end(); ++it)
{
mp_o.insert(make_pair(it->second, it->first));
}
multimap<int, int>::iterator its = mp_o.end();
vector<int> result;
for (int i = 0; its != mp_o.begin() && i < k; ++i)
{
result.push_back((--its)->second);
}
return result;
}
};