class Solution {
int result = 0;
public int reversePairs(int[] nums) {
//可以归并排序 找出 逆序数 先分左右 最后排序
qiege(nums,0,nums.length-1);
return result;
}
public void qiege(int []nums,int left,int right)
{
if(left<right)
{
int mid =(left+right)/2;
qiege(nums,left,mid);
qiege(nums,mid+1,right);
paixu(nums,left,right);
}
}
public void paixu(int []nums,int left,int right)
{
int mid =(left+right)/2;
int rightmid = mid+1;
int leftmid =left;
int temp =0;
int a[]=new int [right-left+1];
int i=0;
while(leftmid<=mid&&rightmid<=right)
{
if(nums[leftmid]<=nums[rightmid])
{
a[i++]=nums[leftmid++];
共以下 11 个回答
c++ 代码 运用归并排序& nums) &nums,int temp[])
class Solution {
public:
int reversePairs(vector
{
int temp[nums.size()];
return mergesort(0,nums.size()-1,nums,temp);
}
int mergesort(int l,int r,vector
{
if(l>=r) return 0;//区间长度为一返回
int m=(l+r)/2;
int sum=mergesort(l,m,nums,temp)+mergesort(m+1,r,nums,temp);
for(int k=l;k<=r;k++)
{
temp[k]=nums[k];
}
int i=l,j=m+1;
for(int k=l;k<=r;k++)
{
if(im+1)
{
while(k<=r) nums[k++]=temp[j++];
}
else if(jr+1)
{
while(k<=r)
nums[k++]=temp[i++];
}
else if(temp[i]<=temp[j]) nums[k]=temp[i++];
else if(temp[i]>temp[j]) nums[k]=temp[j++],sum+=m-i+1;
}
return sum;
}
};
class Solution {
int result = 0;
public int reversePairs(int[] nums) {
//可以归并排序 找出 逆序数 先分左右 最后排序
qiege(nums,0,nums.length-1);
return result;
}
public void qiege(int []nums,int left,int right)
{
if(left<right)
{
int mid =(left+right)/2;
qiege(nums,left,mid);
qiege(nums,mid+1,right);
paixu(nums,left,right);
}
}
public void paixu(int []nums,int left,int right)
{
int mid =(left+right)/2;
int rightmid = mid+1;
int leftmid =left;
int temp =0;
int a[]=new int [right-left+1];
int i=0;
while(leftmid<=mid&&rightmid<=right)
{
if(nums[leftmid]<=nums[rightmid])
{
a[i++]=nums[leftmid++];
}
8.1
Day23:下面是代码
归并排序的应用