每日一题.2671.频率跟踪器
发表于
题目
请你设计并实现一个能够对其中的值进行跟踪的数据结构,并支持对频率相关查询进行应答。
实现 FrequencyTracker
类:
FrequencyTracker()
:使用一个空数组初始化FrequencyTracker
对象。void add(int number)
:添加一个number
到数据结构中。void deleteOne(int number)
:从数据结构中删除一个number
。数据结构 可能不包含number
,在这种情况下不删除任何内容。bool hasFrequency(int frequency)
: 如果数据结构中存在出现frequency
次的数字,则返回true
,否则返回false
。
示例 1:
1 | 输入 |
示例 2:
1 | 输入 |
示例 3:
1 | 输入 |
提示:
1 <= number <= 105
1 <= frequency <= 105
- 最多调用
add
、deleteOne
和hasFrequency
共计2 * 105
次
思路
由题设可知,题目要求对值进行跟踪,并保留相应的频率。
那么建立哈希表1用于保留对数值的追踪,建立哈希表2以数值为索引,跟踪访问频率。
每日一题.1969. 数组元素的最小非零乘积
发表于
每日一题.1793. 好子数组的最大分数
发表于
题目
给你一个整数数组 nums
(下标从 0 开始)和一个整数 k
。
一个子数组 (i, j)
的 分数 定义为 min(nums[i], nums[i+1], ..., nums[j]) * (j - i + 1)
。一个 好 子数组的两个端点下标需要满足 i <= k <= j
。
请你返回 好 子数组的最大可能 分数 。
示例 1:
1 | 输入:nums = [1,4,3,7,4,5], k = 3 |
示例 2:
1 | 输入:nums = [5,5,4,5,4,1,1,1], k = 0 |
提示:
1 <= nums.length <= 105
1 <= nums[i] <= 2 * 104
0 <= k < nums.length
思路
min(nums[i], nums[i+1], ..., nums[j]) * (j - i + 1)
定义式包含两部分一部分是i到j区间上的最小值,另一部分是区间长度。题设要求找到该定义式的最大值,在初始条件下,i=k=j
,此时式子的值为num[k]
当i或j向左右移动时,区间最小值将会变化而区间的长度也将会变化。
已知区间最小值是不断变小的,区间长度是不断变大的,那么在一个区间最小值确定的情况下不断的拓宽区间的长度直到区间的左值或右值比当前区间最小值小(即再拓宽会改变区间最小值)此时取得当前最小值下能取得的最大表达式值。
而后继续移动i或者j,在刚才假设的情况下,此时区间最小值将会变化,重复刚才的步骤,将几个区间最小值的最大表达式值进行比较,最终取得整个数组维度上的表达式的最大值。
简单来讲就是,决定木桶能装多少水的不是最长的木板而是最短的那一块。
代码
不想写代码,贴一个。
1 | func maximumScore(nums []int, k int) int { |
方大镜扎古加眼灯
发表于
fyne
发表于
更新于
todolist-2023
发表于
代码规范
发表于
更新于
全局唯一标识分区表GPT
发表于
更新于
计算机是如何启动的?
发表于
更新于
“pull oneself up by one’s bootstraps”