LeetCode 剑指Offer51 数组中的逆序对
题目链接:LeetCode 剑指Offer51 数组中的逆序对
题目大意:
在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数。
题解:
归并排序过程中计数即可。
class Solution {
public:
int reversePairs(vector<int>& nums) {
int n = nums.size();
vector<int> tmp(n);
return mergeSort(nums, tmp, 0, n - 1);
}
int mergeSort(vector<int>& nums, vector<int>& tmp, int left, int right) {
if (left >= right) {
return 0;
}
int mid = left + right >> 1;
int cnt = mergeSort(nums, tmp, left, mid) + mergeSort(nums, tmp, mid + 1, right);
int i = left, j = mid + 1, pos = left;
while (i <= mid && j <= right) {
if (nums[i] <= nums[j]) {
tmp[pos++] = nums[i++];
cnt += (j - mid - 1);
} else {
tmp[pos++] = nums[j++];
}
}
while (i <= mid) {
tmp[pos++] = nums[i++];
cnt += (j - mid - 1);
}
while (j <= right) {
tmp[pos++] = nums[j++];
}
copy(tmp.begin() + left, tmp.begin() + right + 1, nums.begin() + left);
return cnt;
}
};
分类:
LeetCode题集
标签:
归并排序
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!