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
Companies: Salesforce
Related Topics:
Array, Two Pointers, Binary Search, Sorting
Similar Questions:
- Count of Range Sum (Hard)
- Finding Pairs With a Certain Sum (Medium)
- Count Number of Pairs With Absolute Difference K (Easy)
// OJ: https://leetcode.com/problems/count-the-number-of-fair-pairs
// Author: github.com/lzl124631x
// Time: O(NlogN)
// Space: O(N)
class Solution {
public:
long long countFairPairs(vector<int>& A, int lower, int upper) {
sort(begin(A), end(A));
long long N = A.size(), ans = 0;
for (int i = 0; i < N; ++i) {
ans += upper_bound(begin(A) + i + 1, end(A), upper - A[i]) - lower_bound(begin(A) + i +
1, end(A), lower - A[i]);
}
return ans;
}
};