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

力扣刷题——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) 。

使用排序+二分查找

排序对结果并无影响,因为只是要找到两个数相加大于lower小于upper

由于lower <= nums[i] + nums[j] <= upper,可得

lower-nums[i] <=  nums[j] <= upper-nums[i] 

我们可以从0开始枚举j,然后在0到j之间二分查找i满足上述公式的(因为i<j),即用

<=upper-nums[j]减去<lower-nums[j]

class Solution {
public:
    long long countFairPairs(vector<int>& nums, int lower, int upper) {
        ranges::sort(nums);
        long long ans=0;
        for(int j=0;j<nums.size();j++)
        {
            auto r=upper_bound(nums.begin(),nums.begin()+j,upper-nums[j]);
            auto l=lower_bound(nums.begin(),nums.begin()+j,lower-nums[j]);
            ans+=r-l;
        }
        return ans;

    }
};


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

相关文章:

  • STM32 ——系统架构
  • Python CATIA二次开发实战:CATIA工程图批量导出DWG/PDF技术解析
  • pyCharm快速安装tensorflow、keras环境
  • Python Flask 开发用于访问数据库的 REST API
  • 《UE5_C++多人TPS完整教程》学习笔记34 ——《P35 网络角色(Network Role)》
  • 解决 word 2016 粘贴图片老是乱飘的问题
  • JAVA面试_进阶部分_java中四种引用类型(对象的强、软、弱和虚引用)
  • 深入探索Matter协议:开发Matter智能家居设备的基本步骤
  • Kubernetes Pod 生命周期详解 之 探针
  • 常用的gpt
  • 【性能测试】Jmeter如何做一份测试报告(3)
  • 第十五届蓝桥杯大学B组(握手问题、小球反弹、好数)
  • K8S学习之基础二十二:k8s的持久化存储之hostPath
  • 通义万相 2.1 + 蓝耘算力,AI 视频生成的梦幻组合
  • halcon机器人视觉(二)固定相机抓取hand_eye_stationarycam_grasp_nut
  • 批量测试IP和域名联通性
  • 从零开始学机器学习——了解分类算法
  • 【从零开始学习计算机科学】操作系统(十)操作系统的引导程序 与 系统安全
  • 数组美丽值求和 (Leetcode 2012)
  • 2025软件供应链安全最佳实践︱新能源汽车领域SCA开源风险治理项目