首页 > 其他分享 >面试必刷TOP101:20、数组中的逆序对

面试必刷TOP101:20、数组中的逆序对

时间:2023-11-04 19:31:41浏览次数:34  
标签:right 20 int mid TOP101 public 必刷 array left

题目

面试必刷TOP101:20、数组中的逆序对_归并排序

题解

解法一:暴力法

import java.util.*;

public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param nums int整型一维数组
     * @return int整型
     */
    public int InversePairs (int[] nums) {
        long total=0;
        for (int i = 0; i < nums.length; i++) {
            for (int j = i+1; j <nums.length; j++) {
                if (nums[i]>nums[j]){
                    total++;
                }
            }
        }
        return (int) (total%1000000007);
    }
}

解法二:归并排序

//归并排序Java版
public class Solution {
    int count=0;
    public int InversePairs(int [] array) {
        mergeSort(array,0,array.length-1);
        return count;
    }

    public void mergeSort(int [] array, int left, int right){
        if(left >= right) return;
        int mid = (left+right)/2;
        mergeSort(array, left, mid);
        mergeSort(array, mid+1, right);
        merge(array, left, mid, right);
    }

    public void merge(int [] array, int left, int mid, int right){
        int[] temp=new int[right-left+1];
        int i=left, j=mid+1;
        int t=0;

        while(i<=mid && j<=right){
            if(array[i]<=array[j]){
                temp[t++]=array[i++];
            }else{
                count=count+(mid-i+1);
                count%=1000000007; //在这里取模
                temp[t++]=array[j++];
            }
        }

        while(i<=mid){
            temp[t++]=array[i++];
        }
        while(j<=right){
            temp[t++]=array[j++];
        }

        for(int k=0;k<temp.length;k++){
            array[left+k]=temp[k];
        }
        
    }
}

标签:right,20,int,mid,TOP101,public,必刷,array,left
From: https://blog.51cto.com/u_16244372/8184954

相关文章

  • P2370 yyy2015c01 的 U 盘
    P2370yyy2015c01的U盘基础思路看到题目要求最小需要的最大接口。自然认为既然答案要求接口,那状态方程的值就是接口。一开始状态方程F[i][j],\(i\)为前\(i\)个接口,\(j\)为当前体积。而F[i][j]则为当前最小的最大接口值状态转移方程F[i][j]=min(F[i][j],(F[i-1][j-v[......
  • 2023-2024-1 20231416 《计算机基础与程序设计》第六周学习总结
    作业信息这个作业属于哪个课程(https://edu.cnblogs.com/campus/besti/2023-2024-1-CFAP)这个作业要求在哪里(https://edu.cnblogs.com/campus/besti/2023-2024-1-CFAP/homework/12754)这个作业的目标《计算机科学概论》第7章《C语言程序设计》第5章作业正文http......
  • 2023-2024-1 20211306 密码系统设计与实现课程学习笔记8
    20211306密码系统设计与实现课程学习笔记8任务详情自学教材第5章,提交学习笔记知识点归纳以及自己最有收获的内容,选择至少2个知识点利用chatgpt等工具进行苏格拉底挑战,并提交过程截图,提示过程参考下面内容“我在学***X知识点,请你以苏格拉底的方式对我进行提问,一次一个问题......
  • hackergame2023wp
    Hackergame启动Hackergame启动!发现校验相似度是在前端校验的,然后通过url传参相似度,传递个100过去就拿到flag了更深更暗在main.js里有一段生成flag的代码,在控制台中调用就好了asyncfunctiongetFlag(token){//Generatetheflagbasedonuser'stoken......
  • CF 杂题集1 2200~2400
    updon2023.11.02初稿updon2023.11.04修正部分表达感觉这一套题质量都很不错,有比较好的思维难度,又不是特别难(当然,对于我来说很难),而且有一些比较好的思路和套路。题目链接均为洛谷链接。CF1474DCleaning摘要:性质:考虑端点,发现一定可以从左右两侧开始消除。分别维......
  • 解题 [HNOI2008] GT考试
    题目:[HNOI2008]GT考试阿申准备报名参加GT考试,准考证号为\(N\)位数\(X_1,X_2…X_n\(0\leX_i\le9)\),他不希望准考证号上出现不吉利的数字。他的不吉利数字\(A_1,A_2,\cdots,A_m\(0\leA_i\le9)\)有\(M\)位,不出现是指\(X_1,X_2\cdotsX_n\)中没有恰好一段等于\(A_......
  • 2023-2024-1 20231410刘珈岐 《计算机基础与程序设计》第六周学习总结
    2023-2024-120231410刘珈岐《计算机基础与程序设计》第六周学习总结作业信息这个作业属于哪个课程(https://edu.cnblogs.com/campus/besti/2023-2024-1-CFAP)这个作业要求在哪里(https://edu.cnblogs.com/campus/besti/2023-2024-1-CFAP/homework/12754)这个作业......
  • IDEA2023 Java web项目配置Tomcat 详细步骤
    1.选择NewProject,设置好项目名和JDK,点击Create2.选择file/打开ProjectStructure  3.在Modules里点击加号选择Web,这样IDEA会帮我们创建好webapp文件夹和web.xml配置文件 4.为项目创建一个web应用artifacts,IDEA在这里会提示,直接点击CreateArtifact就可以自动配置 5.......
  • P5227 [AHOI2013] 连通图
    P5227[AHOI2013]连通图(膜拜并感谢@Genius_Z给予本题解思路)因为这一题是线段树合并板题,所以我们使用LCT。考虑最暴力的想法,维护一棵树和很多不在树上的边,每一次询问就暴力拆边,从那些没有被禁的边里面补到树上。这个时候我们就会发现,每次“补边”的操作非常的消耗时间。......
  • P3784 [SDOI2017] 遗忘的集合
    传送门description对于一个元素都\(\leqn\)的正整数集合\(S\)(不含相同元素),\(f(i)\)表示使用集合\(S\)里的数加和为\(i\)的方案数,每个元素可以被使用多次,两个方案不同当且仅当存在一个元素在两种方案中使用次数不同。现给定\(n\)和\(f(i),1\leqi\leqn\)。求出集......