1885. Count Pairs in Two Arrays π
Description
Given two integer arrays nums1
and nums2
of length n
, count the pairs of indices (i, j)
such that i < j
and nums1[i] + nums1[j] > nums2[i] + nums2[j]
.
Return the number of pairs satisfying the condition.
Example 1:
Input: nums1 = [2,1,2,1], nums2 = [1,2,1,2] Output: 1 Explanation: The pairs satisfying the condition are: - (0, 2) where 2 + 2 > 1 + 1.
Example 2:
Input: nums1 = [1,10,6,2], nums2 = [1,4,1,5] Output: 5 Explanation: 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.
Constraints:
n == nums1.length == nums2.length
1 <= n <= 105
1 <= nums1[i], nums2[i] <= 105
Solutions
Solution 1: Sorting + Two Pointers
We can transform the inequality in the problem to \(\textit{nums1}[i] - \textit{nums2}[i] + \textit{nums1}[j] - \textit{nums2}[j] > 0\), which simplifies to \(\textit{nums}[i] + \textit{nums}[j] > 0\), where \(\textit{nums}[i] = \textit{nums1}[i] - \textit{nums2}[i]\).
For the array \(\textit{nums}\), we need to find all pairs \((i, j)\) that satisfy \(\textit{nums}[i] + \textit{nums}[j] > 0\).
We can sort the array \(\textit{nums}\) and then use the two-pointer method. Initialize the left pointer \(l = 0\) and the right pointer \(r = n - 1\). Each time, we check if \(\textit{nums}[l] + \textit{nums}[r]\) is less than or equal to \(0\). If it is, we move the left pointer to the right in a loop until \(\textit{nums}[l] + \textit{nums}[r] > 0\). At this point, all pairs with the left pointer at \(l\), \(l + 1\), \(l + 2\), \(\cdots\), \(r - 1\) and the right pointer at \(r\) satisfy the condition, and there are \(r - l\) such pairs. We add these pairs to the answer. Then, move the right pointer to the left and continue the above process until \(l \ge r\).
The time complexity is \(O(n \times \log n)\), and the space complexity is \(O(n)\). Here, \(n\) is the length of the array.
1 2 3 4 5 6 7 8 9 10 11 12 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
|