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;
        }
    }
    

    笔记

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

  • 相关阅读:
    Stream流的使用
    ThreadLocal原理和使用场景?
    Python+Appium实现APP自动化测试
    查看Linux系统版本信息
    linux命令之修改yum源为国内镜像
    lsb_release: command not found 解决
    docker安装mysql
    win10 系统出现“你不能访问此共享文件夹,因为你组织的安全策略阻止未经身份验证的来宾访问。”
    python常用sys模块
    python常用os模块
  • 原文地址:https://www.cnblogs.com/ustca/p/12356810.html
Copyright © 2011-2022 走看看