Skip to content

Commit 7dcb520

Browse files
committedFeb 22, 2025
Add solution #327
1 parent f84d835 commit 7dcb520

File tree

2 files changed

+59
-0
lines changed

2 files changed

+59
-0
lines changed
 

‎README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -263,6 +263,7 @@
263263
322|[Coin Change](./0322-coin-change.js)|Medium|
264264
324|[Wiggle Sort II](./0324-wiggle-sort-ii.js)|Medium|
265265
326|[Power of Three](./0326-power-of-three.js)|Easy|
266+
327|[Count of Range Sum](./0327-count-of-range-sum.js)|Hard|
266267
328|[Odd Even Linked List](./0328-odd-even-linked-list.js)|Medium|
267268
329|[Longest Increasing Path in a Matrix](./0329-longest-increasing-path-in-a-matrix.js)|Hard|
268269
331|[Verify Preorder Serialization of a Binary Tree](./0331-verify-preorder-serialization-of-a-binary-tree.js)|Medium|

‎solutions/0327-count-of-range-sum.js

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
/**
2+
* 327. Count of Range Sum
3+
* https://leetcode.com/problems/count-of-range-sum/
4+
* Difficulty: Hard
5+
*
6+
* Given an integer array nums and two integers lower and upper, return the number of range
7+
* sums that lie in [lower, upper] inclusive.
8+
*
9+
* Range sum S(i, j) is defined as the sum of the elements in nums between indices i and j
10+
* inclusive, where i <= j.
11+
*/
12+
13+
/**
14+
* @param {number[]} nums
15+
* @param {number} lower
16+
* @param {number} upper
17+
* @return {number}
18+
*/
19+
var countRangeSum = function(nums, lower, upper) {
20+
const result = [0];
21+
for (let i = 0; i < nums.length; i++) {
22+
result.push(result[i] + nums[i]);
23+
}
24+
25+
function mergeSort(input, left, right) {
26+
if (left >= right) return 0;
27+
const middle = Math.floor((left + right) / 2);
28+
let count = mergeSort(input, left, middle) + mergeSort(input, middle + 1, right);
29+
let i = left;
30+
let j = middle + 1;
31+
let k = middle + 1;
32+
33+
while (i <= middle) {
34+
while (j <= right && input[j] - input[i] < lower) j++;
35+
while (k <= right && input[k] - input[i] <= upper) k++;
36+
count += k - j;
37+
i++;
38+
}
39+
40+
const sorted = [];
41+
i = left;
42+
j = middle + 1;
43+
while (i <= middle || j <= right) {
44+
if (i > middle) sorted.push(input[j++]);
45+
else if (j > right) sorted.push(input[i++]);
46+
else if (input[i] <= input[j]) sorted.push(input[i++]);
47+
else sorted.push(input[j++]);
48+
}
49+
50+
for (let i = 0; i < sorted.length; i++) {
51+
input[left + i] = sorted[i];
52+
}
53+
54+
return count;
55+
}
56+
57+
return mergeSort(result, 0, result.length - 1);
58+
};

0 commit comments

Comments
 (0)
Please sign in to comment.