zoukankan      html  css  js  c++  java
  • [LeetCode] 面试题51. 数组中的逆序对

    class Solution {
        public int reversePairs(int[] nums) {
            int len = nums.length;
            if(len<2){
                return 0;
            }
    
            int[] copy = new int[len];
            for(int i=0;i<len;i++){
                copy[i]=nums[i];
            }
            int[] temp=new int[len];
            return reversePairs(copy,0,len-1,temp);
        }
    
        private int reversePairs(int[] nums, int left, int right, int[] temp) {
            if (left == right) {
                return 0;
            }
    
            int mid = left + (right - left) / 2;
            int leftPairs = reversePairs(nums, left, mid, temp);
            int rightPairs = reversePairs(nums, mid + 1, right, temp);
    
            // 如果整个数组已经有序,则无需合并,注意这里使用小于等于
            if (nums[mid] <= nums[mid + 1]) {
                return leftPairs + rightPairs;
            }
    
            int crossPairs = mergeAndCount(nums, left, mid, right, temp);
            return leftPairs + rightPairs + crossPairs;
    
        }
    
        private int mergeAndCount(int[] nums, int left, int mid, int right, int[] temp) {
            for (int i = left; i <= right; i++) {
                temp[i] = nums[i];
            }
    
            int i = left;
            int j = mid + 1;
    
            int count = 0;
    
            for (int k = left; k <= right; k++) {
                // 有下标访问,得先判断是否越界
                if (i == mid + 1) {
                    nums[k] = temp[j];
                    j++;
                } else if (j == right + 1) {
                    nums[k] = temp[i];
                    i++;
                } else if (temp[i] <= temp[j]) {
                    // 注意:这里是 <= ,写成 < 就不对,请思考原因
                    nums[k] = temp[i];
                    i++;
                } else {
                    nums[k] = temp[j];
                    j++;
    
                    // 在 j 指向的元素归并回去的时候,计算逆序对的个数,只多了这一行代码
                    count += (mid - i + 1);
                }
            }
            return count;
        }
    }

    这道题也难欸

  • 相关阅读:
    expects parameter 1 to be resource, array given 错误
    PHP 多维数组处理,将1维或者多维数组处理成字符串
    uchome realname_set()参数
    ASP.NET 开源CMS汇总
    微软 Visual Studio .net 2005 常用插件搜罗
    C#中DllImport用法和路径问题
    XSLT输出的HTML空元素导致jQurey解析出错
    hdu1874畅通工程续
    Super Prime
    Beautiful Year
  • 原文地址:https://www.cnblogs.com/doyi111/p/12771051.html
Copyright © 2011-2022 走看看