美团暑期实习
编程题03 - 众数
void modify(vector<set<int>>& A, unordered_map<int, int>& hash, int val, bool is_add)
{
A[hash[val]].erase(val);
if(is_add) hash[val]++;
else hash[val]--;
A[hash[val]].insert(val);
}
vector<int> solution(vector<int>& nums, int k)
{
vector<int> res;
unordered_map<int, int> hash;
vector<set<int>> A(k + 1); // 出现次数为i的元素所在的集合
for(int l = 0, r = 0, max_cnt = 0; r < nums.size(); r++)
{
modify(A, hash, nums[r], true);
if(hash[nums[r]] > max_cnt) max_cnt = hash[nums[r]];
if(l < r - k + 1)
{
modify(A, hash, nums[l++], false);
if(A[max_cnt].empty()) max_cnt--;
}
if(r >= k - 1) res.push_back(*A[max_cnt].begin());
}
return res;
}编程题04 - 树上DP
Last updated