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

[复制链接]
发表于 2026-1-21 01:16:27 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
标题先容




解法

红蓝染色体法
  1. class Solution {
  2.     public long countFairPairs(int[] nums, int lower, int upper) {
  3.         long res = 0;
  4.         Arrays.sort(nums);
  5.         for(int i = 0; i < nums.length -1; i++){
  6.             int left = lowerBound(nums,lower - nums[i],i + 1); // >= lower-nums[i] 的位置
  7.             int right = lowerBound(nums,upper - nums[i] + 1,i + 1) - 1; // <= upper-nums[j]的位置
  8.             res = res + right - left + 1;
  9.         }
  10.         return res;
  11.     }
  12.     public int lowerBound(int[] nums, int target, int startidx) {
  13.         int left = startidx, right = nums.length - 1;
  14.         while (left <= right) {
  15.             int mid = left + (right - left) / 2;
  16.             if (nums[mid] < target) {
  17.                 left = mid + 1;
  18.             } else {
  19.                 right = mid - 1;
  20.             }
  21.         }
  22.         return left;
  23.     }
  24. }
复制代码
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表