题解 | 数组中的逆序对

数组中的逆序对

https://www.nowcoder.com/practice/96bd6684e04a44eb80e6a68efc0ec6c5

import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param nums int整型一维数组 
     * @return int整型
     */

    public int InversePairs (int[] nums) {
        if (nums.length<2){
            return 0;
        }
        int []temp = new int [nums.length];
         //刚开始上面的两行互换了,导致出错,因为要选判断长度,在创建数组,一般要先判断。
        // write code here
        return findNum(0,nums.length-1,nums,temp);
        


    }    
    public int findNum(int left,int right,int[] nums,int[]temp){
        if (left>=right){
            return 0;
        }
       int mid = (left+right)/2;
       int res = findNum(left,mid,nums,temp)+findNum(mid+1,right,nums,temp);
       res = res%1000000007; 
       //合并
       //将nums的数组先复制到temp,然后将排序后的数放到nums;
       for (int k = left;k<=right;k++){
        temp[k] = nums[k];
       }
       int i = left,j = mid+1;
       for (int k = left;k<=right;k++){
        //排序
        if(i>mid){
            nums[k] = temp[j++];
        }else if (j>right){
            nums[k] = temp[i++];
        }else if (temp[i]<=temp[j]){
            nums[k] = temp[i++];

        }else{
            nums[k]=temp[j++];
            int num = (mid-i+1)%1000000007; 
            res = res + num;
        }
        
       }
       return res%1000000007; 

       }
       
       
    }

这个题目很难,要多看几遍

全部评论

相关推荐

2025-11-23 00:38
河南科技大学 Java
等闲_:这个更是死路一条
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务