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

  • 相关阅读:
    Shell-06循环结构
    Godot 初学
    Zotero | Zotero translator插件更新 | 解决百度学术文献无法获取问题
    【Git】credential.helper
    安装ROS
    【Qt高阶】Linux安装了多个版本的Qt 部署Qt程序,出包【2023.10.17】
    【Linux】第十二章 多线程(线程概念+线程控制)
    最新支付宝蚂蚁森林自动偷能量,解放双手
    spring整合struts2
    ubuntu, nvidia driver, cuda, cudnn, pytorch-gpu版本安装
  • 原文地址:https://blog.csdn.net/qq_25482087/article/details/126962107
  • 最新文章
  • 【JVM】编译执行与解释执行的区别是什么?JVM 使用哪种方式?
    用 Hashids 优雅解决 C 端自增 ID 暴露问题
    V8引擎 精品漫游指南--Ignition篇(上) 指令 栈帧 槽位 调用约定 内存布局 基础内容
    LLVM Pass快速入门(四):代码插桩
    milkup:桌面端 markdown AI续写和即时渲染
    基于项目工程构建SBOM(软件物料清单)的研究
    鸿蒙应用开发UI基础第二节:鸿蒙应用程序框架核心解析与实操
    .NET 中如何快速实现 List 集合去重?
    扣子Coze实战:从0到1打造抖音+小红书热点监控智能体
    浅谈数据访问层
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号