码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 数据结构与算法之LeetCode-1224. 最大相等频率 - 力扣(LeetCode)


    1224. 最大相等频率 - 力扣(LeetCode)

    • 使用哈希表map记录某个数字x出现的次数map[x],freq记录出现次数为f的数的数目为freq[f],maxFreq表示最大出现次数。以某个字符nums[i]结尾的数组前缀合要求的充要条件为满足以下三个条件之一:
      • 最大出现次数maxFreq = 1,那么所有数的出现次数都是一次,随意删除一个数即可符合要求
      • 所有数的出现次数都是maxFreq或者maxFreq-1,并且最大出现次数的数只有一个,删除一个最大出现次数的数,那么所有数的出现次数都是maxFreq-1
      • 除开一个数,其他所有数的出现次数都是maxFreq,并且该数的出现次数为1,直接删除出现次数为1的数,那么所有数的出现次数都是maxFreq
    /**
     * @param {number[]} nums
     * @return {number}
     */
    var maxEqualFreq = function(nums) {
        const freq = new Map();
        const count = new Map();
        let res = 0, maxFreq = 0;
        for (let i = 0; i < nums.length; i++) {
            if (!count.has(nums[i])) {
                count.set(nums[i], 0);
            }
            if (count.get(nums[i]) > 0) {
                freq.set(count.get(nums[i]), freq.get(count.get(nums[i])) - 1);
            }
            count.set(nums[i], count.get(nums[i]) + 1);
            maxFreq = Math.max(maxFreq, count.get(nums[i]));
            if (!freq.has(count.get(nums[i]))) {
                freq.set(count.get(nums[i]), 0);
            }
            freq.set(count.get(nums[i]), freq.get(count.get(nums[i])) + 1);
            const ok = maxFreq === 1 ||
                    freq.get(maxFreq) * maxFreq + freq.get(maxFreq - 1) * (maxFreq - 1) === i + 1 && freq.get(maxFreq) === 1 ||
                    freq.get(maxFreq) * maxFreq + 1 === i + 1 && freq.get(1) === 1;
            if (ok) {
                res = Math.max(res, i + 1);
            }
        }
        return res;
    };
    

    执行结果:通过

    执行用时:140 ms, 在所有 JavaScript 提交中击败了88.89%的用户

    内存消耗:51 MB, 在所有 JavaScript 提交中击败了88.89%的用户

    通过测试用例:45 / 45

    模拟计数
    function maxEqualFreq(nums: number[]): number {
        let n = nums.length, max = 0, ans = 0
        const cnt = new Array<number>(100010).fill(0), sum = new Array<number>(100010).fill(0)
        for (let i = 0; i < n; i++) {
            let t = nums[i], len = i + 1, cur = ++cnt[t]
            sum[cur]++; sum[cur - 1]--;
            max = Math.max(max, cur)
            if (max == 1) ans = len
            if (max * sum[max] + 1 == len) ans = len
            if ((max - 1) * (sum[max - 1] + 1) + 1 == len) ans = len
        }
        return ans
    };
    

    执行结果:通过

    执行用时:80 ms, 在所有 TypeScript 提交中击败了100.00%的用户

    内存消耗:55.9 MB, 在所有 TypeScript 提交中击败了100.00%的用户

    通过测试用例:45 / 45

    参考链接

    1224. 最大相等频率 - 力扣(LeetCode)

    最大相等频率 - 最大相等频率 - 力扣(LeetCode)

    【宫水三叶】常规计数模拟题 - 最大相等频率 - 力扣(LeetCode)

  • 相关阅读:
    每日一题|2022-11-2|1620. 网络信号最好的坐标|暴力枚举|Golang
    一个配线光交的网络覆盖能力有多大?
    synchronized(this)、synchronized(.class)、锁静态方法、方法区别?
    音频文件元数据修改:批量操作的技巧和方法
    淘宝店铺所有商品数据接口
    决策树oo
    2.MySQL ---- 修改数据库的字符集(日常小技巧)
    2022 CMU15-445 Project 1 Buffer Pool
    FANUC机器人用户自定义报警的具体配置方法详解
    Mysql 我随手造200W条数据,给你们讲讲分页优化。
  • 原文地址:https://blog.csdn.net/qq_25482087/article/details/126962107
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号