Return the number of pairs that satisfy the conditions.
Example 1:
Input: nums1 = [3,2,5], nums2 = [2,2,1], diff = 1
Output: 3
Explanation:
There are 3 pairs that satisfy the conditions:
1. i = 0, j = 1: 3 - 2 <= 2 - 2 + 1. Since i < j and 1 <= 1, this pair satisfies the conditions.
2. i = 0, j = 2: 3 - 5 <= 2 - 1 + 1. Since i < j and -2 <= 2, this pair satisfies the conditions.
3. i = 1, j = 2: 2 - 5 <= 2 - 1 + 1. Since i < j and -3 <= 2, this pair satisfies the conditions.
Therefore, we return 3.
Example 2:
Input: nums1 = [3,-1], nums2 = [-2,2], diff = -1
Output: 0
Explanation:
Since there does not exist any pair that satisfies the conditions, we return 0.
Constraints:
n == nums1.length == nums2.length
2 <= n <= 105
-104 <= nums1[i], nums2[i] <= 104
-104 <= diff <= 104
Solutions
Solution 1: Binary Indexed Tree
We can transform the inequality in the problem to \(nums1[i] - nums2[i] \leq nums1[j] - nums2[j] + diff\). Therefore, if we calculate the difference between the corresponding elements of the two arrays and get another array \(nums\), the problem is transformed into finding the number of pairs in \(nums\) that satisfy \(nums[i] \leq nums[j] + diff\).
We can enumerate \(j\) from small to large, find out how many numbers before it satisfy \(nums[i] \leq nums[j] + diff\), and thus calculate the number of pairs. We can use a binary indexed tree to maintain the prefix sum, so we can find out how many numbers before it satisfy \(nums[i] \leq nums[j] + diff\) in \(O(\log n)\) time.