2024.3.21
- 题目来源
- 我的题解
- 方法一 哈希表
题目来源
力扣每日一题;题序:2671
我的题解
方法一 哈希表
两个哈希表,一个存储 [number,frequency],一个存储[freuency,count]。当然这道题可以使用数组实现,但是不具备通用性,一旦上限不确定则无法使用数组实现。
时间复杂度:O(n)
空间复杂度:O(m)
class FrequencyTracker {Map<Integer,Integer> num_fre;Map<Integer,Integer> fre_count;public FrequencyTracker() {num_fre=new HashMap<>();fre_count=new HashMap<>();}public void add(int number) {num_fre.put(number,num_fre.getOrDefault(number,0)+1);int fre=num_fre.get(number);fre_count.put(fre,fre_count.getOrDefault(fre,0)+1);int pre=fre_count.getOrDefault(fre-1,0);if(pre-1==0)fre_count.remove(fre-1);else if(pre!=0)fre_count.put(fre-1,fre_count.getOrDefault(fre-1,0)-1);}public void deleteOne(int number) {if(num_fre.containsKey(number)){int fre=num_fre.get(number);if(fre-1==0){num_fre.remove(number);}else{num_fre.put(number,fre-1);}fre_count.put(fre-1,fre_count.getOrDefault(fre-1,0)+1);int pre=fre_count.getOrDefault(fre,0);if(pre-1==0)fre_count.remove(fre);else if(pre!=0)fre_count.put(fre,fre_count.getOrDefault(fre,0)-1);}}public boolean hasFrequency(int frequency) {return fre_count.containsKey(frequency);}
}
有任何问题,欢迎评论区交流,欢迎评论区提供其它解题思路(代码),也可以点个赞支持一下作者哈😄~