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

    题目描述:在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数P。并将P对1000000007取模的结果输出。 即输出P%1000000007
    输入描述:题目保证输入的数组中没有的相同的数字
    数据范围:对于%50的数据,size<=10^4;对于%75的数据,size<=10^5;对于%100的数据,size<=2*10^5

    实现语言:Java

    public class Solution {
        static int pairNum;
        public int InversePairs(int [] array) {
            pairNum=0;
            if(array!=null){
                mergeSort(array,0,array.length-1);
            }
            return pairNum;
        }
        private void mergeSort(int[] array,int start,int end){
            int mid=(start+end)>>1;
            if(start<end){
                mergeSort(array,start,mid);
                mergeSort(array,mid+1,end);
                mergeHelper(array,start,mid,end);
            }
        }
        private void mergeHelper(int[] arr, int left, int mid, int right) {
            int[] tmp = new int[right - left + 1];
            int i = left;
            int j = mid + 1;
            int k = 0;
            while (i <= mid && j <= right) {
                if (arr[i] < arr[j]) {
                    tmp[k++] = arr[i++];
                } else {
                    tmp[k++] = arr[j++];
                    pairNum += mid - i + 1;
                    if (pairNum > 1000000007) {
                        pairNum %= 1000000007;
                    }
                }
            }
            while (i <= mid) {
                tmp[k++] = arr[i++];
            }
            while (j <= right) {
                tmp[k++] = arr[j++];
            }
            for (int m = 0; m < tmp.length; m++) {
                arr[m + left] = tmp[m];
            }
        }
    }
    
  • 相关阅读:
    2021.2.6 日记
    P2168 荷马史诗
    2021寒假集训——数论初步
    2021.2.5 日记
    2021.2.4 日记
    2021.2.3 日记
    堆——学习笔记
    树状数组——学习笔记
    Easy | LeetCode 350. 两个数组的交集 II | 哈希 | 排序+双指针
    Easy | LeetCode 66. 加一 | 模拟
  • 原文地址:https://www.cnblogs.com/xidian2014/p/10198694.html
Copyright © 2011-2022 走看看