LeetCode 1224 最大相等频率[模拟 Map] HERODING的LeetCode之路
Posted HERODING23
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode 1224 最大相等频率[模拟 Map] HERODING的LeetCode之路相关的知识,希望对你有一定的参考价值。
解题思路:
一道标准的模拟题,将满足条件的前缀种类列举下来,有如下四种情况:
- 1111这样只有一类数字的前缀。
- 1234这样每个数字的频率都只有1。
- 1112223334这样一个数字频率为1,其他数字频率相等。
- 1112223334444这样一个数字频率为max+1,其他数字频率相等(为max)。
那么用两个map,一个存储数字频率,一个存储频率的频率,代码如下:
class Solution
public:
int maxEqualFreq(vector<int>& nums)
// 记录每个数字的频率
unordered_map<int, int> num;
// 记录每种频率包含的数字种类
unordered_map<int, int> freq;
int maxFreq = 0;
int type = 0;
int res = 0;
for(int i = 0; i < nums.size(); i ++)
int x = nums[i];
// 更新数字频率和种类
if(num[x] ++ == 0)
type ++;
// 更新最大数字频率
maxFreq = max(maxFreq, num[x]);
// 更新频率包含的数字种类
freq[num[x]] ++;
freq[num[x] - 1] --;
// 1111或者12345情况
if(type == (i + 1) || type == 1)
res = i + 1;
// 1112223334情况
if(freq[maxFreq] == (type - 1) && freq[1] == 1)
res = i + 1;
// 1112223334444情况
if(freq[maxFreq - 1] == type - 1 && freq[maxFreq] == 1)
res = i + 1;
return res;
;
以上是关于LeetCode 1224 最大相等频率[模拟 Map] HERODING的LeetCode之路的主要内容,如果未能解决你的问题,请参考以下文章
LeetCode 1224. 最大相等频率 / 1450. 在既定时间做作业的学生人数 / 655. 输出二叉树