生成一段求逆序对数量的c++代码
以下是使用归并排序求逆序对数量的C++代码:
#include <iostream>
#include <vector>
using namespace std;
long long merge(vector<int>& nums, vector<int>& temp, int left, int mid, int right) {
int i = left, j = mid + 1, k = left;
long long count = 0;
while (i <= mid && j <= right) {
if (nums[i] <= nums[j]) {
temp[k++] = nums[i++];
} else {
temp[k++] = nums[j++];
count += mid - i + 1;
}
}
while (i <= mid) {
temp[k++] = nums[i++];
}
while (j <= right) {
temp[k++] = nums[j++];
}
for (int l = left; l <= right; l++) {
nums[l] = temp[l];
}
return count;
}
long long mergeSort(vector<int>& nums, vector<int>& temp, int left, int right) {
if (left >= right) {
return 0;
}
int mid = left + (right - left) / 2;
long long count = 0;
count += mergeSort(nums, temp, left, mid);
count += mergeSort(nums, temp, mid + 1, right);
count += merge(nums, temp, left, mid, right);
return count;
}
long long countReversePairs(vector<int>& nums) {
int n = nums.size();
vector<int> temp(n);
return mergeSort(nums, temp, 0, n - 1);
}
int main() {
vector<int> nums = {7, 5, 6, 4};
cout << countReversePairs(nums) << endl; // 5
return 0;
}
该算法时间复杂度为O(n log n),空间复杂度为O(n)。
原文地址: https://www.cveoy.top/t/topic/bb7R 著作权归作者所有。请勿转载和采集!