Input: nums1 =[2,1,2,1], nums2 =[1,2,1,2]Output: 1Explanation: The pairs satisfying the condition are:-(0,2) where 2+2>1+1.
Example 2:
1
2
3
4
5
6
7
8
Input: nums1 =[1,10,6,2], nums2 =[1,4,1,5]Output: 5Explanation: The pairs satisfying the condition are:-(0,1) where 1+10>1+4.-(0,2) where 1+6>1+1.-(1,2) where 10+6>4+1.-(1,3) where 10+2>4+5.-(2,3) where 6+2>1+5.
We can reduce the problem to counting pairs (i, j) with i < j such that (nums1[i] - nums2[i]) + (nums1[j] - nums2[j]) > 0. By sorting the differences, we can use two pointers or binary search to efficiently count valid pairs.
classSolution {
public:longlong countPairs(vector<int>& nums1, vector<int>& nums2) {
int n = nums1.size();
vector<int> diff(n);
for (int i =0; i < n; ++i) diff[i] = nums1[i] - nums2[i];
sort(diff.begin(), diff.end());
longlong ans =0;
for (int i =0; i < n; i++) {
int l = i+1, r = n;
while (l < r) {
int m = l + (r-l)/2;
if (diff[i] + diff[m] >0) r = m;
else l = m+1;
}
ans += n - l;
}
return ans;
}
};
funcCountPairs(nums1, nums2 []int) int64 {
n:= len(nums1)
diff:= make([]int, n)
fori:=0; i < n; i++ {
diff[i] = nums1[i] -nums2[i]
}
sort.Ints(diff)
varansint64fori:=0; i < n; i++ {
l, r:=i+1, nforl < r {
m:=l+ (r-l)/2ifdiff[i]+diff[m] > 0 {
r = m } else {
l = m+1 }
}
ans+= int64(n-l)
}
returnans}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
classSolution {
publiclongcountPairs(int[] nums1, int[] nums2) {
int n = nums1.length;
int[] diff =newint[n];
for (int i = 0; i < n; i++) diff[i]= nums1[i]- nums2[i];
Arrays.sort(diff);
long ans = 0;
for (int i = 0; i < n; i++) {
int l = i+1, r = n;
while (l < r) {
int m = l + (r-l)/2;
if (diff[i]+ diff[m]> 0) r = m;
else l = m+1;
}
ans += n - l;
}
return ans;
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
classSolution {
funcountPairs(nums1: IntArray, nums2: IntArray): Long {
val n = nums1.size
val diff = IntArray(n) { nums1[it] - nums2[it] }
diff.sort()
var ans = 0Lfor (i in0 until n) {
var l = i+1; var r = n
while (l < r) {
val m = l + (r-l)/2if (diff[i] + diff[m] > 0) r = m else l = m+1 }
ans += n - l
}
return ans
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
classSolution:
defcountPairs(self, nums1: list[int], nums2: list[int]) -> int:
n = len(nums1)
diff = [a-b for a, b in zip(nums1, nums2)]
diff.sort()
ans =0for i in range(n):
l, r = i+1, n
while l < r:
m = (l + r) //2if diff[i] + diff[m] >0:
r = m
else:
l = m +1 ans += n - l
return ans
impl Solution {
pubfncount_pairs(nums1: Vec<i32>, nums2: Vec<i32>) -> i64 {
let n = nums1.len();
letmut diff: Vec<i32>= nums1.iter().zip(nums2.iter()).map(|(&a, &b)| a-b).collect();
diff.sort();
letmut ans =0i64;
for i in0..n {
let (mut l, mut r) = (i+1, n);
while l < r {
let m = l + (r-l)/2;
if diff[i] + diff[m] >0 {
r = m;
} else {
l = m+1;
}
}
ans += (n - l) asi64;
}
ans
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
classSolution {
countPairs(nums1: number[], nums2: number[]):number {
constn=nums1.length;
constdiff=nums1.map((a, i) =>a-nums2[i]);
diff.sort((a, b) =>a-b);
letans=0;
for (leti=0; i<n; i++) {
letl=i+1, r=n;
while (l<r) {
constm=l+ ((r-l) >>1);
if (diff[i] +diff[m] >0) r=m;
elsel=m+1;
}
ans+=n-l;
}
returnans;
}
}