网站建设战略合作方案,网站建设sql语句留言板,aspcms手机网站怎么做,网站建设的工作方法剑指 Offer 51. 数组中的逆序对
在数组中的两个数字#xff0c;如果前面一个数字大于后面的数字#xff0c;则这两个数字组成一个逆序对。输入一个数组#xff0c;求出这个数组中的逆序对的总数。
示例 1:
输入: [7,5,6,4] 输出: 5
限制#xff1a;
0 数组长度 如果前面一个数字大于后面的数字则这两个数字组成一个逆序对。输入一个数组求出这个数组中的逆序对的总数。
示例 1:
输入: [7,5,6,4] 输出: 5
限制
0 数组长度 50000
解题思路
在归并排序中穿插逆序对的计算归并两个排序数组时当出现右区间元素大于左区间元素的时候说明左区间内的元素和当前元素都能组成逆序对
代码
class Solution {int cnt0;public int reversePairs(int[] nums) {mergeSort(nums,0,nums.length-1);return cnt;}public void mergeSort(int[] nums,int l,int r){int mid(r-l)/2l;if(lr){mergeSort(nums,l,mid);mergeSort(nums,mid1,r);merge(nums,l,r);}}public void merge(int[] nums,int l,int r){int[] tnew int[r-l1];int mid(r-l)/2l;int il,jmid1,idx0;while(imidjr){if(nums[i]nums[j])t[idx]nums[i];else{cntmid-i1;t[idx]nums[j];} }while(imid)t[idx]nums[i];while(jr)t[idx]nums[j];for(int k0;kr-l1;k)nums[lk]t[k];}
}