zoukankan      html  css  js  c++  java
  • 数组中的逆序对

    ##题目描述 在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数P。 并将P对1000000007取模的结果输出,即输出P%1000000007。

    输入描述:
    题目保证输入的数组中没有的相同的数字。

    数据范围:

    对于%50的数据,size<=10^4
    
    对于%75的数据,size<=10^5
    
    对于%100的数据,size<=2*10^5
    

    思路

    分治法,归并排序。
    时间复杂度O(nlgn),空间复杂度O(n)。

    代码

    public class Solution {
        private int val;
        
        private int[] tmp;
        
        //二路归并
        private void divide(int[] arr, int start, int end) {
            if(start >= end) return;
            int mid = (start + end) >> 1;
            divide(arr, start, mid);
            divide(arr, mid + 1, end);
            merge(arr, start, mid, end);
        }
        
        //归并排序
        private void merge(int[] arr, int start, int mid, int end) {
            int k = 0, l = start, r = mid + 1;
            while(l <= mid && r <= end) {
                //原归并排序的核:tmp[k++] = arr[l] < arr[r] ? arr[l++] : arr[r++];
                if(arr[l] > arr[r]) {
                    val = (val + mid + 1 - l)%1000000007;
                    tmp[k++] = arr[r++];
                } else {
                    tmp[k++] = arr[l++];
                }
            }
            while(l <= mid)    tmp[k++] = arr[l++];
            while(r <= end)    tmp[k++] = arr[r++];
            for(int i = start; i <= end; i++) {
                arr[i] = tmp[i-start];
            }
        }
        
        public int InversePairs(int [] array) {
            if(array == null || array.length == 0) return 0;
            val = 0;
            tmp = new int[array.length];
            divide(array, 0, array.length-1);
            return val;
        }
    }
    

    笔记

    递归先写递归出口,再写递归运行框架,最后实现递归操作细节。

  • 相关阅读:
    2012 Multi-University #8
    2016"百度之星"
    Codeforces Round #352 (Div. 2)
    数位DP CF 55D Beautiful numbers
    数位DP GYM 100827 E Hill Number
    2012 Multi-University #9
    2012 Multi-University #10
    java生成指定范围的随机数
    MySql查询时间段的方法
    eclipse报错GC overhead limit exceed,卡顿
  • 原文地址:https://www.cnblogs.com/ustca/p/12356810.html
Copyright © 2011-2022 走看看