算法复习:归并排序
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); } };
相关推荐
nongfusanquan0 2020-08-18
Broadview 2020-07-19
数据与算法之美 2020-07-05
Masimaro 2020-06-21
wonner 2020-06-17
Oudasheng 2020-06-04
从零开始 2020-06-05
清溪算法君老号 2020-06-01
风吹夏天 2020-05-26
yangjingdong00 2020-05-11
Tips 2020-04-30
ustbfym 2020-04-25
清溪算法君老号 2020-04-24
dushine00 2020-04-19
数据与算法之美 2020-04-18
wulaxiaohei 2020-04-17
nurvnurv 2020-04-16
路漫 2020-04-15