【LCR 170. 交易逆序对的总数】

编程入门 行业动态 更新时间:2024-10-19 16:40:33

【LCR 170. 交易<a href=https://www.elefans.com/category/jswz/34/1765666.html style=逆序对的总数】"/>

【LCR 170. 交易逆序对的总数】

目录

  • 一、题目描述
  • 二、算法原理
  • 三、代码实现
    • 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);}
};

更多推荐

【LCR 170. 交易逆序对的总数】

本文发布于:2023-12-05 19:09:17,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1665043.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:逆序   总数   LCR

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!