Skip to content

Commit 8210923

Browse files
committed
Add solution #2563
1 parent e64c715 commit 8210923

File tree

2 files changed

+58
-1
lines changed

2 files changed

+58
-1
lines changed

README.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
# 1,360 LeetCode solutions in JavaScript
1+
# 1,361 LeetCode solutions in JavaScript
22

33
[https://leetcodejavascript.com](https://leetcodejavascript.com)
44

@@ -1287,6 +1287,7 @@
12871287
2551|[Put Marbles in Bags](./solutions/2551-put-marbles-in-bags.js)|Hard|
12881288
2559|[Count Vowel Strings in Ranges](./solutions/2559-count-vowel-strings-in-ranges.js)|Medium|
12891289
2560|[House Robber IV](./solutions/2560-house-robber-iv.js)|Medium|
1290+
2563|[Count the Number of Fair Pairs](./solutions/2563-count-the-number-of-fair-pairs.js)|Medium|
12901291
2570|[Merge Two 2D Arrays by Summing Values](./solutions/2570-merge-two-2d-arrays-by-summing-values.js)|Easy|
12911292
2579|[Count Total Number of Colored Cells](./solutions/2579-count-total-number-of-colored-cells.js)|Medium|
12921293
2594|[Minimum Time to Repair Cars](./solutions/2594-minimum-time-to-repair-cars.js)|Medium|
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
/**
2+
* 2563. Count the Number of Fair Pairs
3+
* https://leetcode.com/problems/count-the-number-of-fair-pairs/
4+
* Difficulty: Medium
5+
*
6+
* Given a 0-indexed integer array nums of size n and two integers lower and upper, return the
7+
* number of fair pairs.
8+
*
9+
* A pair (i, j) is fair if:
10+
* - 0 <= i < j < n, and
11+
* - lower <= nums[i] + nums[j] <= upper
12+
*/
13+
14+
/**
15+
* @param {number[]} nums
16+
* @param {number} lower
17+
* @param {number} upper
18+
* @return {number}
19+
*/
20+
var countFairPairs = function(nums, lower, upper) {
21+
let result = 0;
22+
23+
nums.sort((a, b) => a - b);
24+
25+
for (let i = 0; i < nums.length - 1; i++) {
26+
const minTarget = lower - nums[i];
27+
const maxTarget = upper - nums[i];
28+
29+
const first = findFirstValidIndex(i + 1, minTarget);
30+
const last = findFirstValidIndex(i + 1, maxTarget + 1) - 1;
31+
32+
if (first <= last) {
33+
result += last - first + 1;
34+
}
35+
}
36+
37+
return result;
38+
39+
function findFirstValidIndex(start, target) {
40+
let left = start;
41+
let right = nums.length - 1;
42+
let index = nums.length;
43+
44+
while (left <= right) {
45+
const mid = Math.floor((left + right) / 2);
46+
if (nums[mid] >= target) {
47+
index = mid;
48+
right = mid - 1;
49+
} else {
50+
left = mid + 1;
51+
}
52+
}
53+
54+
return index;
55+
}
56+
};

0 commit comments

Comments
 (0)