Задача в Авито
Дан массив целых чисел и число k. Нужно вернуть k наиболее встречающиеся по частоте элементы.
Пример:
1 1 1 2 2 3
2
Вывод: 1 2
Решение:
Будем хранить частоту чисел в хеш-мапе, затем пушаем в массив пары из элемента и сколько он встречался. Сортируем массив и выводим первые k. лол всё
vector<int> topKFrequent(vector<int>& nums, int k) {
unordered_map<int, int> cnt;
for (auto el : nums)
cnt[el]++;
vector<pair<int, int>> arr;
for (const auto & [key, value] : cnt)
arr.emplace_back(value, key);
sort(arr.rbegin(), arr.rend());
vector<int> ans;
for (int i = 0; i < k; ++i)
ans.push_back(arr[i].second);
return ans;
}
Асимптотика O(NlogN) в худшем случае
Если наши решение лучше, не стесняемся писать в комментарии
@algoses
Post #348
11.5K
- 🤣 26
- 🔥 6
- ❤ 4
- 😁 4
- 🙈 2