首页 > 编程语言 > 详细

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

时间:2019-02-14 14:46:25      阅读:191      评论:0      收藏:0      [点我收藏+]

题目:

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

 

解答:

 1 public class Solution {
 2     public static void main(String[] args) {
 3         int[] arr = {7,5,6,4};
 4         System.out.println(getInversePairs(arr));
 5     }
 6 
 7     private static int getInversePairs(int[] arr) {
 8         if(arr == null) {
 9             return 0;
10         }
11 
12         int[] clone = arr.clone();
13         return mergeSort(arr, clone, 0, arr.length-1);
14     }
15 
16     private static int mergeSort(int[] array, int[] result, int start, int end) {
17         if(start == end) {
18             result[start] = array[end];
19             return 0;
20         }
21 
22         int length = (end-start) >> 1;
23         int left = mergeSort(array, result,start, start+length);
24         int right = mergeSort(array, result, start+length+1, end);
25         int leftIndex = start+length;
26         int rightIndex = end;
27         int count = 0;
28 
29         int point = rightIndex;
30         
31         while(leftIndex >= start && rightIndex >= start+length+1) {
32             if(array[leftIndex] > array[rightIndex]) {
33                 result[point--] = array[leftIndex--];
34                 count = count + rightIndex-(start+length);
35             } else {
36                 result[point--] = array[rightIndex--];
37             }
38         }
39 
40         for(int i = leftIndex; i >= start; i--) {
41             result[point--] = array[i];
42         }
43 
44         for(int j = rightIndex; j >= start+length+1; j--) {
45             result[point--] = array[j];
46         }
47 
48         return left+right+count;
49 
50     }
51 }

技术分享图片

 

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

原文:https://www.cnblogs.com/wylwyl/p/10374322.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!