Skip to content

Commit 07f7bf0

Browse files
authored
feat: add typescript solution to locf problem: No.51. Reverse Pairs (doocs#436)
1 parent 3d7241b commit 07f7bf0

File tree

2 files changed

+83
-0
lines changed

2 files changed

+83
-0
lines changed

lcof/面试题51. 数组中的逆序对/README.md

+44
Original file line numberDiff line numberDiff line change
@@ -192,6 +192,50 @@ private:
192192
};
193193
```
194194
195+
### **TypeScript**
196+
197+
```ts
198+
function reversePairs(nums: number[]): number {
199+
let count: number = 0;
200+
const n: number = nums.length;
201+
if (n < 2) return 0;
202+
203+
function merge(nums: number[], left: number, mid: number, right: number): void {
204+
let n: number = right - left + 1;
205+
let t: number[] = new Array(n);
206+
let i: number = left, j: number = mid + 1, idx: number = 0;
207+
while (i <= mid && j <= right) {
208+
if (nums[i] > nums[j]) {
209+
count += (mid - i + 1);
210+
t[idx++] = nums[j++];
211+
} else {
212+
t[idx++] = nums[i++];
213+
}
214+
}
215+
while (i <= mid) {
216+
t[idx++] = nums[i++];
217+
}
218+
while (j <= right) {
219+
t[idx++] = nums[j++];
220+
}
221+
for (let k: number = 0; k < n; ++k) {
222+
nums[left + k] = t[k];
223+
}
224+
}
225+
226+
function mergeSort(nums: number[], left: number, right: number): void {
227+
if (left == right) return;
228+
let mid: number = (left + right) >> 1;
229+
mergeSort(nums, left, mid);
230+
mergeSort(nums, mid + 1, right);
231+
merge(nums, left, mid, right);
232+
}
233+
234+
mergeSort(nums, 0, n - 1);
235+
return count;
236+
};
237+
```
238+
195239
### **...**
196240

197241
```
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
function reversePairs(nums: number[]): number {
2+
let count: number = 0;
3+
const n: number = nums.length;
4+
if (n < 2) return 0;
5+
6+
function merge(nums: number[], left: number, mid: number, right: number): void {
7+
let n: number = right - left + 1;
8+
let t: number[] = new Array(n);
9+
let i: number = left, j: number = mid + 1, idx: number = 0;
10+
while (i <= mid && j <= right) {
11+
if (nums[i] > nums[j]) {
12+
count += (mid - i + 1);
13+
t[idx++] = nums[j++];
14+
} else {
15+
t[idx++] = nums[i++];
16+
}
17+
}
18+
while (i <= mid) {
19+
t[idx++] = nums[i++];
20+
}
21+
while (j <= right) {
22+
t[idx++] = nums[j++];
23+
}
24+
for (let k: number = 0; k < n; ++k) {
25+
nums[left + k] = t[k];
26+
}
27+
}
28+
29+
function mergeSort(nums: number[], left: number, right: number): void {
30+
if (left == right) return;
31+
let mid: number = (left + right) >> 1;
32+
mergeSort(nums, left, mid);
33+
mergeSort(nums, mid + 1, right);
34+
merge(nums, left, mid, right);
35+
}
36+
37+
mergeSort(nums, 0, n - 1);
38+
return count;
39+
};

0 commit comments

Comments
 (0)