标签:hid 归并 for 有序 open cli vector pairs public
leetcode 面试题51. 数组中的逆序对
本质上就是归并排序,并在合并区间过程中统计交换的逆序对的数目
归并排序需要开o(n)的辅助空间
class Solution { public: int deal(vector<int>&nums,vector<int>&tmp,int ll,int rr) { if(ll>=rr)//返回条件 return 0; int mid=ll+(rr-ll)/2; int count=deal(nums,tmp,ll,mid)+deal(nums,tmp,mid+1,rr); if(nums[mid]<nums[mid+1])//已经有序不需要再比了 return count; int x=ll,y=mid+1,i; for(i=0;x<=mid&&y<=rr;i++)//合并两个数组到新的数组 { if(nums[x]<=nums[y]) { tmp[i]=nums[x]; x++; } else { tmp[i]=nums[y]; y++; count+=(mid-x+1); } } for(;x<=mid;x++) { tmp[i]=nums[x]; i++; } for(;y<=rr;y++) { tmp[i]=nums[y]; i++; } int yy=ll; for(int k=0;k<i;k++) { nums[yy]=tmp[k]; yy++; } return count; } int reversePairs(vector<int>& nums) { int size=nums.size(); if(size<2) return 0; vector<int>tmp(size,0); return deal(nums,tmp,0,size-1); } };
标签:hid 归并 for 有序 open cli vector pairs public
原文地址:https://www.cnblogs.com/dzzy/p/12778717.html