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

leetcode 2563. 统计公平数对的数目

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

显然数组长度最大可以到10的5次方n方的复杂度必然超时,阅读题目实际上就是寻找两个位置不同的数满足不等式即可(实际上i j无所谓是哪个 我们只要把位置小的想成i就行)。
按照上面的思路我们只需要排序数组然后从前往后遍历数组然后利用二分查找寻找下界和上界的下标然后把下标相减就能得到答案。
值得注意的是这样计算会把结果翻倍(假设 1,2满足答案那么按照我们的算法1,2 2,1都会被统计所以结果要减半)

通过代码

class Solution {
public:
    int findlow(vector<int>& nums, int v, int target) {
        int n = nums.size();
        int l = 0, r = n - 1;
        int mid;
        while (l < r) {
            mid = (l + r) / 2;
            if (nums[mid] + v >= target) {
                r = mid;
            } else{
                l = mid + 1;
            }
        }
        if(nums[l] + v < target)return -1;
      //  cout << l;
        return l;
    }
    int findhigh(vector<int>& nums,int v, 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] + v > target) {
                r = mid - 1;
            } else{
                l = mid;
            }
        }
        if(nums[l] + v > target)return -1;
        return l;
    }
    long long countFairPairs(vector<int>& nums, int lower, int upper) {
        long long ans = 0;
        int n = nums.size();
        sort(nums.begin(), nums.end());
        int low, high;
        for (int i = 0; i < n; i++) {
            low = findlow(nums,nums[i],lower);
            high = findhigh(nums,nums[i],upper);
            if(low != -1 && high != -1){
                ans += high - low;
              //  cout << low << "-" << high << "\n";
                if(i < low || i > high){
                    ans++;
                }
            }
        }
        return ans/2;
    }
};

在这里插入图片描述


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

相关文章:

  • 告别复杂,拥抱简洁:用plusDays(7)代替plus(7, ChronoUnit.DAYS)
  • 精准化糖尿病知识问答(LLM+机器学习预测模型)
  • C#,入门教程(12)——数组及数组使用的基础知识
  • 农产品价格报告爬虫使用说明
  • 使用vhd虚拟磁盘安装两个win10系统
  • 数据结构 前缀中缀后缀
  • x86-64数据传输指令
  • 【Pytorch和Keras】使用transformer库进行图像分类
  • Python-基于PyQt5,pdf2docx,pathlib的PDF转Word工具
  • 海外问卷调查,最常用到的渠道查有什么特殊之处
  • XML DOM - 导航节点
  • CSDN图片加载不出来问题解决
  • webrtc peerconnection_client peerconnection_server 连接失败问题解决 win10 win11
  • 使用UpdateCursor删除行
  • 学习ArkTS语言
  • 开源2 + 1链动模式AI智能名片S2B2C商城小程序视角下从产品经营到会员经营的转型探究
  • react中useEffect的使用
  • 【数据结构】_C语言实现带头双向循环链表
  • 安装anaconda3 后 电脑如何单独运行python,python还需要独立安装吗?
  • BurpSuite抓包与HTTP基础
  • MySQL数据库 (三)- 函数/约束/多表查询/事务
  • pytorch实现门控循环单元 (GRU)
  • 《深入理解HTTP交互与数据监控:完整流程与优化实践》
  • FreeRTOS学习 --- 中断管理
  • 写好简历的三个关键认知
  • NVIDIA (英伟达)的 GPU 产品应用领域