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. 输出二叉树

每日一题1224. 最大相等频率

bzoj1224

LeetCode 895 最大频率栈[Map] HERODING的LeetCode之路

Leetcode——最大频率栈

LeetCode 0895. 最大频率栈