力扣2080.区间内查询数字的频率
-
在下标上做二分
- 把所有下标存入哈希表
- 在left,right的范围内做二分求个数
cpp
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);
}
};