首页 > 其他分享 >剑指offer:数组中的逆序对

剑指offer:数组中的逆序对

时间:2022-12-01 19:01:55浏览次数:44  
标签:tmp offer int mid -- 数组 left data 逆序


题目描述

在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数。

class Solution {
public:
int InversePairs(vector<int> data) {

int len = data.size();

if (len == 0){
return 0;
}

vector<int> tmp(len);

int res = mergeSort(data, tmp, 0, len - 1);

return res;
}

private:

int mergeSort(vector<int> &data, vector<int> &tmp, int left, int right){

if (left == right){
return 0;
}

int mid = left + (right - left) / 2;

int leftCnt = mergeSort(data, tmp, left, mid);
int rightCnt = mergeSort(data, tmp, mid + 1, right);

int i = mid;
int j = right;
int tmpIndex = right;

int cnt = 0;

while (i >= left && j >= mid + 1){
if (data[i] > data[j]){
tmp[tmpIndex--] = data[i--];
//难点是怎么算cnt
cnt += j - mid;
}
else{
tmp[tmpIndex--] = data[j--];
}
}

for (; i >= left; i--){
tmp[tmpIndex--] = data[i--];
}

for (; j >= mid + 1; j--){
tmp[tmpIndex--] = data[j--];
}

for (int i = left; i <= right; i++){
data[i] = tmp[i];
}

return leftCnt + rightCnt + cnt;
}


};


标签:tmp,offer,int,mid,--,数组,left,data,逆序
From: https://blog.51cto.com/u_15899184/5903623

相关文章

  • 剑指offer:最小的K个数
    题目描述输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。方法一O(n)改变输入,适合小数据classSolution{public:vector<i......
  • 剑指offer:翻转单词顺序列
    题目描述牛客最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上。同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思。例如,“s......
  • List集合转换成数组
    我现在有个需求:将File集合转换成MultipartFile数组结构然后我就开始在网上开启了List转换到数组之旅。首先来看一个例子ArrayList<String>list=newArrayList<......
  • vue2 数组18 some erver filter reduce axios
    some: return true是固定写法,终止some循环 erver: filter:   优化写法:arr.filter(item=>item.state).reduce((累加的结果,当前循环项)=>{},初始值)拿上......
  • Go--求数组奇偶数之和
    packagemain//申明main包import"fmt"//导入fmt标准库funcmain(){arr:=[...]int{01,11,22,33,44,55,66,77,88,99,98,87,76,65,54,43,32,......
  • js 将长度不确定的数组分割成n个一组的数组
    代码实现:consttransSliceImg=(imgs,num)=>{letnewImgs=[]returnimgs.reduce(function(pre,item,index,imgs){varbegin=index*num;......
  • 剑指offer题解C++版
    一,常见数据结构1,数组3-找出数组中重复的数字4-二维数组中的查找5-替换空格29-顺时针打印矩阵leetcode989-数组形式的整数加法leetcode26-删除有序数组中的重复......
  • Js 数组筛选重复项
    js数组去重复:Array.prototype.distinct=function(){vararr=this,result=[],i,j,len=arr.length;for(i=0;i<len;......
  • numpy获取数组最大值和索引
    他俩都是在60频率但是不清楚每个频率的振幅分布在哪。importmatplotlib.pyplotaspltimportnumpyasnpimportpandasaspdimporttorchimportnumpyasnpdf=......
  • 数组
    #普通数组:只能使用整数作为数组索引#普通数组 一次赋一个值 array1[0]=pear array1[1]=apple 一次赋多个值 array2=(tomjackalice) array3=(`cat/etc/passwd`)......