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

力扣2563. 统计公平数对的数目

在这里插入图片描述
这一题的意思是让找数组中所有的公平对数,什么是所谓的公平对数呢,就是这两个数的和处在lower和upper之间的,就是符合的公平对数,那么怎么找呢?
首先我们可以对数组进行排序,因为公平数对并没有顺序限制只需要两个数的和处在某一个区间即可。当数组处于升序的时候,就可以采用二分的方式来寻找一个数处在一个范围之间。
我们可以固定一个数的位置,然后来判断与它匹配的另一个数是否在lower-固定的数和upper-固定的数。
如果在说明是符合公平对数的,我们只需要用二分来找到最早出现与固定的数匹配的和最晚出现位置,两者之差就是当固定一个数时,与这个数相匹配的所有数的个数。
完整代码如下:

class Solution {
public:long long countFairPairs(vector<int>& nums, int lower, int upper) {long long ans=0;sort(nums.begin(),nums.end());//可以对数组进行排序,因为我们不在意数对的先后顺序//那么从左到右对于每一个点,我们可以尝试在它的右边找一个nums[j]//使得这个nums[j]>=lower-nums[i]// nums[j]<=upper-nums[i]for(int i=0;i<nums.size();i++){int l=i+1;int r=nums.size()-1;int lx=INT_MAX;while(l<=r){int mid=(l+r)/2;if(nums[mid]>=lower-nums[i]&&nums[mid]<=upper-nums[i]){r=mid-1;lx=min(lx,mid);}else if(nums[mid]<lower-nums[i]){l=mid+1;}else{r=mid-1;}}l=i+1;r=nums.size()-1;int rx=-1;while(l<=r){int mid=(l+r)/2;if(nums[mid]>=lower-nums[i]&&nums[mid]<=upper-nums[i]){l=mid+1;rx=max(rx,mid);}else if(nums[mid]<lower-nums[i]){l=mid+1;}else{r=mid-1;}}if(rx==-1||lx==INT_MAX){ans+=0;}else{ans+=rx-lx+1;}}return ans;}
};

时间复杂度O(nlogn)

http://www.dtcms.com/a/491070.html

相关文章:

  • 在VMware上运行Linux(我选择的是Ubuntu)
  • 【Linux内核】Linux系统启动之旅
  • 正则表达式匹配不到表达式情况?
  • 【数据结构与算法_学习精华】
  • 第18讲:C语言内存函数
  • 外贸网站如何做推广论坛网站 备案
  • 深圳网站建设首选h5case是什么网站
  • Matlab的交通标志定位实现
  • 课堂网站开发企业管理培训班哪个好
  • 记录一个自动学习的脚本开发过程
  • h5游戏免费下载:一起蛙蛙跳
  • chrome中的axure插件提示无法不受支持
  • 石家庄住房城乡建设厅网站著名企业vi设计
  • 深圳做网站的公司排名开个人网站如何赚钱
  • centos 生产环境搭建最佳实践 (一)
  • RocketMQ 实战:马拉松系统异步化与延时任务落地(含死信队列处理)
  • 通达信指标平台
  • 网站建设及推广培训网站备案查询站长工具
  • MATLAB2025B版本新特点
  • Node.js使用Express+SQLite实现登录认证
  • 仿百度百科网站源码设计类专业学校有哪些
  • 重庆建站多少钱一年工业产品设计培训
  • 【IEEE出版 | 早鸟优惠本周截止】人工智能驱动图像处理与计算机视觉技术国际学术研讨会 (AIPCVT 2025)
  • 网站开发案例教程东营网站建设服务商
  • 基于微信小程序的垃圾分类管理系统【2026最新】
  • SSM高校教室申请管理系统yf80k(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
  • 创建一个SpringBoot项目(连接数据库)
  • 飞沐网站设计大鹏网站建设建站好不好
  • 淮南专业网站建设怎样保存网站资料 做证据
  • 如何在WPF中实现ComboBox多选