码农知识堂 - 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)

  • 相关阅读:
    [清爽快捷]一条命令解决国内访问github超时For Linux、MAC 、Windows
    windows 安装配置GO开发环境
    JSP在左侧加一列,每行是第几条数据
    股票数据接口l2有哪些过人之处?
    Dubbo 3 StateRouter:下一代微服务高效流量路由
    Django内置函数详解Httprequest详解(模拟搜索/模拟用户登陆/模拟上传文件功能)
    SpringEL:SpEL表达式文本转译
    Flutter的实现原理初探
    不止于观测|阿里云可观测套件正式发布
    [linux] 把txt文本文件分成10个子文件,并保存。 linux命令
  • 原文地址:https://blog.csdn.net/qq_25482087/article/details/126962107
  • 最新文章
  • 沪漂五周年了:我越来越迷茫了
    Agentic Skill Routing 实战:别再把所有 Skill 塞进 AI Agent 上下文
    MySQL-Seconds_behind_master的精度误差
    [MAF预定义ChatClient中间件-03]CachingChatClient——利用缓存省钱省时间
    AI的至暗历史:从万众期待到被政府撤资,AI的两次死亡徘徊
    Agent OS :五种驯服不确定性的范式
    PortSwigger SQL注入LAB11
    数据库即时编译JIT
    [Begin]AI Learn Data Day 0
    深度学习进阶(二十七)现代 LLM 的核心架构设计其二:SwiGLU
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号