当前位置: 首页 > article >正文

leetcode 2080. 区间内查询数字的频率

题目如下
在这里插入图片描述
数据范围
在这里插入图片描述
示例
在这里插入图片描述

这题十分有意思一开始我想对每个子数组排序二分结果超时了。
转换思路:我们可以提前把每个数字出现的位置先记录下来形成集合,
然后拿着left和right利用二分查找看看left和right是不是在集合里然后做一个相减就出答案了。

通过代码

class RangeFreqQuery {
public:
   unordered_map<int,vector<int>> map;
   //unordered_map<string,int> mapc;
    RangeFreqQuery(vector<int>& arr) {
        int n = arr.size();
        for(int i = 0;i < n;i++){
           if(map.count(arr[i]) == 1)map[arr[i]].emplace_back(i);
           else{
            map[arr[i]] = vector<int>{i};
           }
        }
    }
      int findlow(vector<int>& nums,int target) {
        int n = nums.size();
        int l = 0, r = n - 1;
        int mid;
        while (l < r) {
            mid = (l + r) / 2;
            if (nums[mid] >= target) {
                r = mid;
            } else{
                l = mid + 1;
            }
        }
        if(nums[l] < target)return -1;
     
        return l;
    }
    int findhigh(vector<int>& nums,int target) {

        int n = nums.size();
        int l = 0, r = n - 1;
        int mid;
        while (l < r) {
            mid = (l + r + 1) / 2;
            if (nums[mid] > target) {
                r = mid - 1;
            } else{
                l = mid;
            }
        }
        if(nums[l] > target)return -1;
        return l;
    }
    int query(int left, int right, int value) {
      //  string a = to_string(left) + "+" + to_string(right) + "+" + to_string(value);
      //  if(mapc.count(a) == 1)return mapc[a];
        if(map.count(value) == 0)return 0;
        vector<int>& v = map[value];
        int l = findlow(v,left);
        int r = findhigh(v,right);
        if(l != -1 && r != -1){
      //      mapc[a] = r - l + 1;
            return r - l + 1;
            }
        return 0;
    }
};

/**
 * Your RangeFreqQuery object will be instantiated and called as such:
 * RangeFreqQuery* obj = new RangeFreqQuery(arr);
 * int param_1 = obj->query(left,right,value);
 */

在这里插入图片描述


http://www.kler.cn/a/528981.html

相关文章:

  • 将markdown文件和LaTex公式转为word
  • 如何编写地信测绘信息相关的综述论文-总结版本
  • 6.攻防世界php_rce
  • 【华为OD-E卷 - 连续出牌数量 100分(python、java、c++、js、c)】
  • 洛谷P2660 zzc 种田
  • 看深度求索如何思索自己的未来
  • 大模型培训讲师老师叶梓分享:DeepSeek多模态大模型janus初探
  • 并发模式:驾驭多线程的艺术
  • 修改题注标签
  • 架构技能(四):需求分析
  • linux为什么不是实时操作系统
  • LeGO LOAM坐标系问题的自我思考
  • Brave132 编译指南 Windows 篇:部署 depot_tools(三)
  • 【LeetCode 刷题】二叉树-修改与构造
  • Diffusion--人工智能领域的革命性技术
  • Node.js——body-parser、防盗链、路由模块化、express-generator应用生成器
  • C++中的析构器(Destructor)(也称为析构函数)
  • 01-六自由度串联机械臂(ABB)位置分析
  • 51单片机 01 LED
  • DeepSeek-R1 论文. Reinforcement Learning 通过强化学习激励大型语言模型的推理能力