马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
标题先容
解法
红蓝染色体法
- class Solution {
- public long countFairPairs(int[] nums, int lower, int upper) {
- long res = 0;
- Arrays.sort(nums);
- for(int i = 0; i < nums.length -1; i++){
- int left = lowerBound(nums,lower - nums[i],i + 1); // >= lower-nums[i] 的位置
- int right = lowerBound(nums,upper - nums[i] + 1,i + 1) - 1; // <= upper-nums[j]的位置
- res = res + right - left + 1;
- }
- return res;
- }
- public int lowerBound(int[] nums, int target, int startidx) {
- int left = startidx, right = nums.length - 1;
- while (left <= right) {
- int mid = left + (right - left) / 2;
- if (nums[mid] < target) {
- left = mid + 1;
- } else {
- right = mid - 1;
- }
- }
- return left;
- }
- }
复制代码 |