当前位置: 首页 > news >正文

力扣每日一题 2024/3/21 频率跟踪器

题目描述

用例说明

 

思路讲解

看到统计数字频率或者出现次数很容易想到用哈希表,但是一个哈希表count将数字和数字出现次数映射起来似乎不太够,如果需要统计数字出现次数的频率的话还是需要进行一次遍历,时间复杂度为O(n),有没有常数级获取数字出现次数的频率呢,再定义一个哈希表times,用来建立数字出现次数和数字出现次数的频率的哈希表。

在添加元素操作中,首先需要将数字和数字出现次数存储到count中,然后更新time哈希表,该数字的出现次数对应的频率加一,该数字添加之前的出现次数对应的频率减一。

删除元素同理,首先找到该数字对应的出现次数,进行减一,然后更新times哈希表,该数字对应出现次数的频率减一,该数字删除后对应的出现次数的频率加一。

代码

class FrequencyTracker {Map<Integer,Integer> count=new HashMap<>();Map<Integer,Integer> times=new HashMap<>();public FrequencyTracker() {}public void add(int number) {count.put(number,count.getOrDefault(number,0)+1);int counts=count.get(number);times.put(counts,times.getOrDefault(counts,0)+1);times.put(counts-1,times.getOrDefault(counts-1,0)-1);}public void deleteOne(int number) {if(count.getOrDefault(number,0)==0) return;count.put(number,count.getOrDefault(number,0)-1);int counts=count.get(number);times.put(counts,times.getOrDefault(counts,0)+1);times.put(counts+1,times.getOrDefault(counts+1,0)-1);}public boolean hasFrequency(int frequency) {return times.getOrDefault(frequency,0)>0;}
}/*** Your FrequencyTracker object will be instantiated and called as such:* FrequencyTracker obj = new FrequencyTracker();* obj.add(number);* obj.deleteOne(number);* boolean param_3 = obj.hasFrequency(frequency);*/

复杂度

时间复杂度O(q) q为查询次数,其余操作均为O(1)时间内访问

空间复杂度O(m) m为值域范围

http://www.lryc.cn/news/323101.html

相关文章:

  • 基于SpringBoot 实现指标监控及日志管理
  • Linux之看门狗
  • 第十九章 TypeScript 装饰器Decorator
  • 第十四章 TypeScript tsconfig.json配置文件
  • 科技助力高质量发展:新质生产力的崛起与企业数字化转型
  • Redis - 缓存访问 缓存穿透 缓存击穿 缓存雪崩
  • SAP Business Application Studio(BAS)中开发Fiori App的基础知识
  • DashScope - 阿里模型服务灵积
  • 个人信息-求职[web前端]
  • Apache DolphinScheduler 社区开启讲师招募,赶快加入吧!
  • 【HTML面试题】src和href的区别
  • 电脑文件msvcp100.dll丢失原因,如何快速修复msvcp100.dll
  • 安装OneNote for Win10 | Win10/Win11
  • 力扣242. 有效的字母异位词
  • windows server 下的mysql 8.0.28修改数据库目录
  • 【Excel自动化办公】使用openpyxl对Excel进行读写操作
  • 大龄女程序员脱单指南:如何科学评估你的Mr. Right?(含C语言代码示例)
  • 深入剖析Java并发库(JUC)之StampedLock的应用与原理
  • 【PMP】每日一练2
  • 2024年投影仪显示技术怎么选?哪个好?优缺点详解,买前必看
  • Git Bash命令初始化本地仓库,提交到远程仓库
  • Docker 学习笔记一
  • Git一点通
  • 商标转让有哪些好处 商标转让条件 商标转让流程
  • 诺视科技完成亿元Pre-A2轮融资,加速Micro-LED微显示芯片商业化落地
  • Unity定时播放音乐
  • 如何做接口测试?
  • U盘打不开提示格式化怎么办,U盘提示格式化数据恢复
  • LeetCode - 存在重复元素
  • RUST egui体验