已解决
【LCR 170. 交易逆序对的总数】
来自网友在路上 11048104提问 提问时间:2023-10-22 01:26:43阅读次数: 104
最佳答案 问答题库1048位专家为你答疑解惑
目录
- 一、题目描述
- 二、算法原理
- 三、代码实现
- 3.1升序:
- 3.2降序:
一、题目描述
二、算法原理
三、代码实现
3.1升序:
class Solution
{
public:int mergeSort(vector<int>& nums, int left, int right){if (left >= right){return 0;}int mid = left + (right - left) / 2, ret = 0;ret += mergeSort(nums, left, mid);ret += mergeSort(nums, mid + 1, right);//求一左一右vector<int> temp(right - left + 1);int cur1 = left, cur2 = mid + 1, i = 0;while (cur1 <= mid && cur2 <= right){if (nums[cur1] <= nums[cur2]){temp[i++] = nums[cur1++];}else{ret += (mid - cur1 + 1);temp[i++] = nums[cur2++]; }}while (cur1 <= mid) temp[i++] = nums[cur1++];while (cur2 <= right) temp[i++] = nums[cur2++];for (int i = left; i <= right; i++){nums[i] = temp[i - left];}return ret;}int reversePairs(vector<int>& record) {return mergeSort(record,0,record.size()-1);}
};
3.2降序:
class Solution
{
public:int mergeSort(vector<int>& nums, int left, int right){if (left >= right){return 0;}int mid = left + (right - left) / 2, ret = 0;ret += mergeSort(nums, left, mid);ret += mergeSort(nums, mid + 1, right);//求一左一右vector<int> temp(right - left + 1);int cur1 = left, cur2 = mid + 1, i = 0;while (cur1 <= mid && cur2 <= right){if (nums[cur1] <= nums[cur2]){temp[i++] = nums[cur2++];}else{ret += (right-cur2+1);temp[i++] = nums[cur1++]; }}while (cur1 <= mid) temp[i++] = nums[cur1++];while (cur2 <= right) temp[i++] = nums[cur2++];for (int i = left; i <= right; i++){nums[i] = temp[i - left];}return ret;}int reversePairs(vector<int>& record) {return mergeSort(record,0,record.size()-1);}
};
查看全文
99%的人还看了
相似问题
猜你感兴趣
版权申明
本文"【LCR 170. 交易逆序对的总数】":http://eshow365.cn/6-21199-0.html 内容来自互联网,请自行判断内容的正确性。如有侵权请联系我们,立即删除!
- 上一篇: 【JavaEE】JUC 常见的类 -- 多线程篇(8)
- 下一篇: 如何使用BERT生成单词嵌入?