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

    面试题51. 数组中的逆序对

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

    示例 1:

    输入: [7,5,6,4]
    输出: 5
     

    限制:

    0 <= 数组长度 <= 50000

    在归并排序中进行处理:

    class Solution {
        private int count;
        private int[] temp;
        public int reversePairs(int[] nums) {
            if(nums == null || nums.length == 0) return 0;
            temp = new int[nums.length];
            mergeSort(nums,0,nums.length - 1);
            return count;
        }
        private void mergeSort(int[] nums,int l,int h){
            if(l >= h) return;
            int m = (h - l) / 2 + l;
            mergeSort(nums,l,m);
            mergeSort(nums,m + 1,h);
            merge(nums,l,m,h);
        }
        private void merge(int[] nums,int l,int m,int h){
            int i = l,j = m + 1,k = l;
            while(i <= m || j <= h){
                if(i > m){
                    temp[k++] = nums[j++];
                }else if(j > h){
                    temp[k++] = nums[i++];
                }else if(nums[i] <= nums[j]){
                    temp[k++] = nums[i++];
                }else{
                    temp[k++] = nums[j++];
                    count += m - i + 1;
                }
            }
            for(int p = l;p <= h;p++){
                nums[p] = temp[p];
            }
        }
    }
    一回生,二回熟
  • 相关阅读:
    DispatcherServlet
    上转型对象
    Javascript闭包(Closure)
    跨域
    dict
    Python 函数参数传递方式
    协同过滤
    白话 动态规划 第一节 初识动态规划
    Spring@Autowired注解与自动装配
    protected
  • 原文地址:https://www.cnblogs.com/zzytxl/p/12590687.html
Copyright © 2011-2022 走看看