Skip to content

Commit 439a2bf

Browse files
Restyled by prettier-markdown
1 parent 6433a54 commit 439a2bf

File tree

1 file changed

+64
-69
lines changed

1 file changed

+64
-69
lines changed

dsa-solutions/lc-solutions/0400-0499/0493-reverse-pairs.md

Lines changed: 64 additions & 69 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ description: The problem is to reverse the pairs.
1414
sidebar_position: 2667
1515
---
1616

17-
## Problem Statement
17+
## Problem Statement
1818

1919
### Problem Description
2020

@@ -58,14 +58,12 @@ Explanation: The reverse pairs are:
5858

5959
The intuition behind this solution is to use a modified Merge Sort algorithm to count the number of reverse pairs in the array.
6060

61-
6261
### Approaches
6362

6463
- Divide the array into smaller subarrays until each subarray has only one element.
6564
- Merge the subarrays back together, counting the number of reverse pairs between each pair of subarrays.
6665
- The merge step is done in a way that ensures the count of reverse pairs is accurate.
6766

68-
6967
#### Codes in Different Languages
7068

7169
<Tabs>
@@ -83,31 +81,30 @@ The intuition behind this solution is to use a modified Merge Sort algorithm to
8381
}
8482

8583
function merge(nums, left, mid, right) {
86-
let count = 0;
87-
let j = mid + 1;
88-
for (let i = left; i <= mid; i++) {
89-
while (j <= right && nums[i] > 2 * nums[j]) j++;
90-
count += j - mid - 1;
91-
}
92-
let temp = new Array(right - left + 1);
93-
mergeSortedArrays(nums, left, mid, right, temp);
94-
for (let i = left; i <= right; i++) nums[i] = temp[i - left];
95-
return count;
84+
let count = 0;
85+
let j = mid + 1;
86+
for (let i = left; i <= mid; i++) {
87+
while (j <= right && nums[i] > 2 \* nums[j]) j++;
88+
count += j - mid - 1;
89+
}
90+
let temp = new Array(right - left + 1);
91+
mergeSortedArrays(nums, left, mid, right, temp);
92+
for (let i = left; i <= right; i++) nums[i] = temp[i - left];
93+
return count;
9694
}
9795
function mergeSort(nums, left, right) {
98-
if (left >= right) return 0;
99-
let mid = left + (right - left) / 2;
100-
let count = mergeSort(nums, left, mid) + mergeSort(nums, mid + 1, right);
101-
count += merge(nums, left, mid, right);
102-
return count;
96+
if (left >= right) return 0;
97+
let mid = left + (right - left) / 2;
98+
let count = mergeSort(nums, left, mid) + mergeSort(nums, mid + 1, right);
99+
count += merge(nums, left, mid, right);
100+
return count;
103101
}
104102

105103
class Solution {
106-
reversePairs(nums) {
107-
return mergeSort(nums, 0, nums.length - 1);
108-
}
104+
reversePairs(nums) {
105+
return mergeSort(nums, 0, nums.length - 1);
106+
}
109107
}
110-
111108

112109
```
113110

@@ -126,29 +123,29 @@ class Solution {
126123
}
127124
128125
function merge(nums: number[], left: number, mid: number, right: number) {
129-
let count = 0;
130-
let j = mid + 1;
131-
for (let i = left; i <= mid; i++) {
132-
while (j <= right && nums[i] > 2 * nums[j]) j++;
133-
count += j - mid - 1;
134-
}
135-
let temp = new Array(right - left + 1);
136-
mergeSortedArrays(nums, left, mid, right, temp);
137-
for (let i = left; i <= right; i++) nums[i] = temp[i - left];
138-
return count;
126+
let count = 0;
127+
let j = mid + 1;
128+
for (let i = left; i <= mid; i++) {
129+
while (j <= right && nums[i] > 2 \* nums[j]) j++;
130+
count += j - mid - 1;
131+
}
132+
let temp = new Array(right - left + 1);
133+
mergeSortedArrays(nums, left, mid, right, temp);
134+
for (let i = left; i <= right; i++) nums[i] = temp[i - left];
135+
return count;
139136
}
140137
function mergeSort(nums: number[], left: number, right: number) {
141-
if (left >= right) return 0;
142-
let mid = left + (right - left) / 2;
143-
let count = mergeSort(nums, left, mid) + mergeSort(nums, mid + 1, right);
144-
count += merge(nums, left, mid, right);
145-
return count;
138+
if (left >= right) return 0;
139+
let mid = left + (right - left) / 2;
140+
let count = mergeSort(nums, left, mid) + mergeSort(nums, mid + 1, right);
141+
count += merge(nums, left, mid, right);
142+
return count;
146143
}
147144
148145
class Solution {
149-
reversePairs(nums: number[]) {
150-
return mergeSort(nums, 0, nums.length - 1);
151-
}
146+
reversePairs(nums: number[]) {
147+
return mergeSort(nums, 0, nums.length - 1);
148+
}
152149
}
153150
154151
```
@@ -177,29 +174,29 @@ class Solution {
177174
k += 1
178175
179176
def merge(nums, left, mid, right):
180-
count = 0
181-
j = mid + 1
182-
for i in range(left, mid + 1):
183-
while j <= right and nums[i] > 2 * nums[j]:
184-
j += 1
185-
count += j - mid - 1
186-
temp = [0] * (right - left + 1)
187-
merge_sorted_arrays(nums, left, mid, right, temp)
188-
for i in range(left, right + 1):
189-
nums[i] = temp[i - left]
190-
return count
177+
count = 0
178+
j = mid + 1
179+
for i in range(left, mid + 1):
180+
while j <= right and nums[i] > 2 _ nums[j]:
181+
j += 1
182+
count += j - mid - 1
183+
temp = [0] _ (right - left + 1)
184+
merge_sorted_arrays(nums, left, mid, right, temp)
185+
for i in range(left, right + 1):
186+
nums[i] = temp[i - left]
187+
return count
191188
192189
def merge_sort(nums, left, right):
193-
if left >= right:
194-
return 0
195-
mid = left + (right - left) // 2
196-
count = merge_sort(nums, left, mid) + merge_sort(nums, mid + 1, right)
197-
count += merge(nums, left, mid, right)
198-
return count
190+
if left >= right:
191+
return 0
192+
mid = left + (right - left) // 2
193+
count = merge_sort(nums, left, mid) + merge_sort(nums, mid + 1, right)
194+
count += merge(nums, left, mid, right)
195+
return count
199196
200197
class Solution:
201-
def reversePairs(self, nums):
202-
return merge_sort(nums, 0, len(nums) - 1)
198+
def reversePairs(self, nums):
199+
return merge_sort(nums, 0, len(nums) - 1)
203200
204201
```
205202

@@ -255,9 +252,11 @@ class Solution:
255252
temp[k++] = nums[j++];
256253
}
257254
}
255+
258256
}
259257
260258
```
259+
261260
</TabItem>
262261
<TabItem value="cpp" label="C++">
263262
<SolutionAuthor name="@Ishitamukherjee2004"/>
@@ -291,33 +290,29 @@ int mergeSort(vector<int>& nums, int left, int right) {
291290
return count;
292291
}
293292
294-
295293
class Solution {
296294
public:
297-
int reversePairs(vector<int>& nums) {
298-
return mergeSort(nums, 0, nums.size() - 1);
299-
295+
int reversePairs(vector<int>& nums) {
296+
return mergeSort(nums, 0, nums.size() - 1);
300297
301298
}
299+
302300
};
303-
```
304-
</TabItem>
301+
```
302+
</TabItem>
305303
</Tabs>
306304

307305
### Complexity Analysis
308306

309307
- **Time Complexity**: $$O(n*log(n))$$, where n is the length of the input array. This is because the solution uses a modified Merge Sort algorithm, which has a time complexity of O(n log n).
310308

311-
312309
- **Space Complexity**: $$O(n)$$, where n is the length of the input array. This is because the solution uses a temporary array to store the merged sorted arrays.
313310

314-
315-
316311
---
317312

318313
<h2>Authors:</h2>
319314

320315
<div style={{display: 'flex', flexWrap: 'wrap', justifyContent: 'space-between', gap: '10px'}}>
321316
{['Ishitamukherjee2004'].map(username => (
322317
<Author key={username} username={username} />
323-
))} </div>
318+
))} </div>

0 commit comments

Comments
 (0)