2563. Count the Number of Fair Pairs
Description
Given a 0-indexed integer array nums
of size n
and two integers lower
and upper
, return the number of fair pairs.
A pair (i, j)
is fair if:
0 <= i < j < n
, andlower <= nums[i] + nums[j] <= upper
Example 1:
Input: nums = [0,1,7,4,4,5], lower = 3, upper = 6 Output: 6 Explanation: There are 6 fair pairs: (0,3), (0,4), (0,5), (1,3), (1,4), and (1,5).
Example 2:
Input: nums = [1,7,9,2,5], lower = 11, upper = 11 Output: 1 Explanation: There is a single fair pair: (2,3).
Constraints:
1 <= nums.length <= 105
nums.length == n
-109 <= nums[i] <= 109
-109 <= lower <= upper <= 109
Solutions
Solution 1: Sorting + Binary Search
First, we sort the array nums
in ascending order. Then, for each nums[i]
, we use binary search to find the lower bound j
of nums[j]
, i.e., the first index that satisfies nums[j] >= lower - nums[i]
. Then, we use binary search again to find the lower bound k
of nums[k]
, i.e., the first index that satisfies nums[k] >= upper - nums[i] + 1
. Therefore, [j, k)
is the index range for nums[j]
that satisfies lower <= nums[i] + nums[j] <= upper
. The count of these indices corresponding to nums[j]
is k - j
, and we can add this to the answer. Note that $j > i$.
The time complexity is $O(n \times \log n)$, and the space complexity is $O(\log n)$. Where $n$ is the length of the array nums
.
1 2 3 4 5 6 7 8 9 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
|
1 2 3 4 5 6 7 8 9 |
|