当前位置:首页 > 编程笔记 > 正文
已解决

【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 内容来自互联网,请自行判断内容的正确性。如有侵权请联系我们,立即删除!