LeetCode 2080 - 区间内查询数字频率
题目
请你设计一个数据结构,它能求出给定子数组内一个给定值的频率。
子数组中一个值的频率指的是这个子数组中这个值的出现次数。
请你实现 RangeFreqQuery 类:
RangeFreqQuery(int[] arr)用下标从 0 开始的整数数组arr构造一个类的实例。int query(int left, int right, int value)返回子数组arr[left...right]中value的频率。
示例 1
输入:
1 | ["RangeFreqQuery", "query", "query"] |
输出:
1 | [null, 1, 2] |
解释:
1 | RangeFreqQuery rangeFreqQuery = new RangeFreqQuery([12, 33, 4, 56, 22, 2, 34, 33, 22, 12, 34, 56]); |
思路
- 直接遍历
- 增加缓存
- 使用哈希表存储每个数字的位置(本解法)
关键点:二分
bisect_left(a, x):
在有序序列 a 中查找 x
返回第一个大于等于 x 的元素位置
如果所有元素都小于 x,返回 len(a)
bisect_right(a, x):
在有序序列 a 中查找 x
返回第一个大于 x 的元素位置
如果所有元素都小于等于 x,返回 len(a)
代码实现
1 | from bisect import bisect_left, bisect_right |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Never Settle!
评论