Skip to content

Commit 7e1e356

Browse files
committed
Add solution #493
1 parent e8d8f51 commit 7e1e356

File tree

2 files changed

+60
-0
lines changed

2 files changed

+60
-0
lines changed

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -394,6 +394,7 @@
394394
488|[Zuma Game](./0488-zuma-game.js)|Hard|
395395
491|[Non-decreasing Subsequences](./0491-non-decreasing-subsequences.js)|Medium|
396396
492|[Construct the Rectangle](./0492-construct-the-rectangle.js)|Easy|
397+
493|[Reverse Pairs](./0493-reverse-pairs.js)|Hard|
397398
496|[Next Greater Element I](./0496-next-greater-element-i.js)|Easy|
398399
500|[Keyboard Row](./0500-keyboard-row.js)|Easy|
399400
501|[Find Mode in Binary Search Tree](./0501-find-mode-in-binary-search-tree.js)|Easy|

solutions/0493-reverse-pairs.js

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
/**
2+
* 493. Reverse Pairs
3+
* https://leetcode.com/problems/reverse-pairs/
4+
* Difficulty: Hard
5+
*
6+
* Given an integer array nums, return the number of reverse pairs in the array.
7+
*
8+
* A reverse pair is a pair (i, j) where:
9+
* - 0 <= i < j < nums.length and
10+
* - nums[i] > 2 * nums[j].
11+
*/
12+
13+
/**
14+
* @param {number[]} nums
15+
* @return {number}
16+
*/
17+
var reversePairs = function(nums) {
18+
let count = 0;
19+
mergeSort(nums, 0, nums.length - 1);
20+
return count;
21+
22+
function mergeSort(input, left, right) {
23+
if (left >= right) return;
24+
const middle = Math.floor((left + right) / 2);
25+
mergeSort(input, left, middle);
26+
mergeSort(input, middle + 1, right);
27+
merge(input, left, middle, right);
28+
}
29+
30+
function merge(input, left, middle, right) {
31+
let j = middle + 1;
32+
for (let i = left; i <= middle; i++) {
33+
while (j <= right && input[i] > 2 * input[j]) {
34+
j++;
35+
}
36+
count += j - (middle + 1);
37+
}
38+
39+
const order = [];
40+
let i = left;
41+
j = middle + 1;
42+
while (i <= middle && j <= right) {
43+
if (input[i] <= input[j]) {
44+
order.push(input[i++]);
45+
} else {
46+
order.push(input[j++]);
47+
}
48+
}
49+
while (i <= middle) {
50+
order.push(input[i++]);
51+
}
52+
while (j <= right) {
53+
order.push(input[j++]);
54+
}
55+
for (let k = 0; k < order.length; k++) {
56+
input[left + k] = order[k];
57+
}
58+
}
59+
};

0 commit comments

Comments
 (0)