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

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

给你一个下标从 0 开始、长度为 n 的整数数组 nums ,和两个整数 lower 和 upper ,返回 公平数对的数目 。

如果 (i, j) 数对满足以下情况,则认为它是一个 公平数对 :

  • 0 <= i < j < n,且
  • lower <= nums[i] + nums[j] <= upper

示例 1:

输入:nums = [0,1,7,4,4,5], lower = 3, upper = 6
输出:6
解释:共计 6 个公平数对:(0,3)、(0,4)、(0,5)、(1,3)、(1,4) 和 (1,5) 。

示例 2:

输入:nums = [1,7,9,2,5], lower = 11, upper = 11
输出:1
解释:只有单个公平数对:(2,3) 。

提示:

  • 1 <= nums.length <= 10^5
  • nums.length == n
  • -10^9 <= nums[i] <= 10^9
  • -10^9 <= lower <= upper <= 10^9

分析:先进行排序后,遍历数组。对于每一个 nums[i],可以使用二分查找找到一个区间 [l,r],使得所有的 i∈[l,r] 满足 lower−nums[j]≤nums[i]≤upper−nums[j]。具体来说,可以找到 ≤upper−nums[j] 的元素个数,减去 <lower−nums[j] 的元素个数,加入答案。

int find_index(int *nums,int numsSize,int target)
{int l=0,r=numsSize,m;while(l<r){int m=(l+r)/2;if(nums[m]>=target)r=m;else if(nums[m]<target)l=m+1;}return l;
}int cmp(const void *a,const void *b)
{return *(int*)a-*(int*)b;
}long long countFairPairs(int* nums, int numsSize, int lower, int upper) {long long ans=0;qsort(nums,numsSize,sizeof(int),cmp);for(int i=0;i<numsSize;++i){int l=find_index(nums,i,lower-nums[i]);int r=find_index(nums,i,upper-nums[i]+1);ans+=r-l;}return ans;
}

相关文章:

  • turtle库绘制进阶图形
  • 【Canvas与旗帜】标准英国米字旗
  • 深入解析进程与线程:区别、联系及Java实现
  • 【大模型框架】LLAMA-FACTORY使用总结
  • 【工控基础】工业相机设置中,增益和数字增益有什么区别?
  • 网络爬虫和前端相关知识
  • 数据结构——栈以及相应的操作
  • 健康养生:拥抱美好生活的基石
  • 9 C 语言变量详解:声明与定于、初始化与赋值、printf 输出与 scanf 输入、关键字、标识符命名规范
  • 嵌入式exfat-nofuse文件系统移植和使用
  • Java核心技术卷第三章
  • 5G基站设计难题:尺寸、重量、功耗和散热
  • Python Requests 库:从安装到精通
  • 【人工智能】Agent智能体关键技术分析
  • 基于SpringBoot的网上找律师管理系统
  • 支持中文对齐的命令行表格打印python库——tableprint
  • 什么是 Stream
  • 代码随想录背包问题完结
  • Linux | 软件仓库管理
  • Python爬虫实战:获取网易新闻数据
  • 马拉松夺冠机器人将小批量量产:价格与一台入门级小轿车差不多
  • “科技+萌点”机器人马拉松刷屏!宇树回应“半马摔倒”
  • 俄最高法宣布解除针对阿富汗塔利班的禁令
  • 图解|回应期盼、可感可及!26项措施打开上海民营经济发展新天地
  • 牛市早报|一季度GDP今日公布,海关总署召开进出口企业座谈会
  • 12家券商一季度业绩报喜:国泰海通净利规模暂列第一,东北证券预增859%