力扣2080.区间内查询数字的频率
-
在下标上做二分
- 把所有下标存入哈希表
- 在left,right的范围内做二分求个数
-
class RangeFreqQuery {unordered_map<int, vector<int>> pos;public:RangeFreqQuery(vector<int>& arr) {for(int i=0;i<arr.size();i++){pos[arr[i]].push_back(i);}}int query(int left, int right, int value) {auto it = pos.find(value);if(it == pos.end()) return 0;auto &a = it->second;return ranges::upper_bound(a,right) - ranges::lower_bound(a,left);}};