Skip to content

Commit ac2d21a

Browse files
committed
feat: add cpp solution to lcof problem: No.51
1 parent 3031ef3 commit ac2d21a

File tree

2 files changed

+65
-0
lines changed

2 files changed

+65
-0
lines changed

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

+35
Original file line numberDiff line numberDiff line change
@@ -157,6 +157,41 @@ var reversePairs = function (nums) {
157157
};
158158
```
159159

160+
### **C++**
161+
162+
```cpp
163+
class Solution {
164+
public:
165+
int reversePairs(vector<int>& nums) {
166+
int n = nums.size();
167+
vector<int> temp(n);
168+
return mergeSort(nums, temp, 0, n - 1);
169+
}
170+
171+
private:
172+
int mergeSort(vector<int>& nums, vector<int>& temp, int l, int r) {
173+
if (l >= r) {
174+
return 0;
175+
}
176+
int m = l + (r - l) / 2;
177+
int count = mergeSort(nums, temp, l, m) + mergeSort(nums, temp, m + 1, r);
178+
int i = l, j = m + 1, k = l;
179+
while (i <= m || j <= r) {
180+
if (i > m) {
181+
temp[k++] = nums[j++];
182+
} else if (j > r || nums[i] <= nums[j]) {
183+
temp[k++] = nums[i++];
184+
} else {
185+
count += m - i + 1;
186+
temp[k++] = nums[j++];
187+
}
188+
}
189+
copy(temp.begin() + l, temp.begin() + r + 1, nums.begin() + l);
190+
return count;
191+
}
192+
};
193+
```
194+
160195
### **...**
161196
162197
```

Diff for: lcof/面试题51. 数组中的逆序对/Solution.cpp

+30
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
class Solution {
2+
public:
3+
int reversePairs(vector<int>& nums) {
4+
int n = nums.size();
5+
vector<int> temp(n);
6+
return mergeSort(nums, temp, 0, n - 1);
7+
}
8+
9+
private:
10+
int mergeSort(vector<int>& nums, vector<int>& temp, int l, int r) {
11+
if (l >= r) {
12+
return 0;
13+
}
14+
int m = l + (r - l) / 2;
15+
int count = mergeSort(nums, temp, l, m) + mergeSort(nums, temp, m + 1, r);
16+
int i = l, j = m + 1, k = l;
17+
while (i <= m || j <= r) {
18+
if (i > m) {
19+
temp[k++] = nums[j++];
20+
} else if (j > r || nums[i] <= nums[j]) {
21+
temp[k++] = nums[i++];
22+
} else {
23+
count += m - i + 1;
24+
temp[k++] = nums[j++];
25+
}
26+
}
27+
copy(temp.begin() + l, temp.begin() + r + 1, nums.begin() + l);
28+
return count;
29+
}
30+
};

0 commit comments

Comments
 (0)