classSolution { public: vector<int> topKFrequent(vector<int> &nums, int k){ unordered_map<int, int> flag; for (int i = 0; i < nums.size(); i++) { flag[nums[i]]++; } vector<pair<int, int>> fre; for (auto i : flag) { fre.push_back({i.first, i.second}); } int n = fre.size(); quickSelect(fre, 0, n - 1, n - k); vector<int> ans; for (int i = 0; i < k; i++) { ans.push_back(fre[n - 1 - i].first); } return ans; } voidquickSelect(vector<pair<int, int>> &nums, int l, int r, int k){ if (l >= r) return; int i = l; int j = r; int p = nums[l].second; while (i < j) { while (i < j && nums[j].second >= p) j--; while (i < j && nums[i].second <= p) i++; swap(nums[i], nums[j]); } swap(nums[i], nums[l]); if (i == k) { return; } elseif (i > k) { quickSelect(nums, l, i - 1, k); } else { quickSelect(nums, i + 1, r, k); } } };