java简单实现数组中的逆序对

 更新时间:2019年03月06日 08:17:12   作者:zz0129  
这篇文章主要为大家详细介绍了java简单实现数组中的逆序对,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

题目描述:

在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数P。并将P对1000000007取模的结果输出。 即输出P%1000000007

解题思路:

一开始一头雾水,后面想到了使用归并排序的思想,其实有多少个逆序对,就是归并排序的时候,后面的数要超越前面多少个,嗯,好像不是很好说,要不然直接看代码吧。还要注意,题目当中说要输出取模的结果,这说明数据可能非常大,所以如果只是单纯的在最后取模的话可能还是无法避免数据太大的影响,所以我们在每次更新count的时候就对其进行取模运算。

刚好又练习了一遍归并排序,记录一下

public class Solution {
  int count;
  public int InversePairs(int [] array) {
    count = 0;
    if(array != null){
      divPairs(array, 0, array.length-1);
    }
    return count%1000000007;
  }
  
  public void divPairs(int[] array, int start, int end){
    if(start >= end)
      return;
    int mid = (start + end)>>1;
    divPairs(array, start, mid);
    divPairs(array, mid+1, end);
    
    mergePairs(array, start, mid, end);
  }
  
  public void mergePairs(int[] array, int start, int mid, int end){
    int i = start, j = mid+1, k = 0;
    int[] temp = new int[end-start+1];
    while(i <= mid && j <= end){
      if(array[i] <= array[j]){
        temp[k++] = array[i++];
      }else{
        temp[k++] = array[j++];
        count += mid - i + 1;
        count %= 1000000007;
      }
    }
    while(i <= mid){
      temp[k++] = array[i++];
    }
    while(j <= end){
      temp[k++] = array[j++];
    }
    for(int x = 0; x < temp.length; x++){
      array[start+x] = temp[x];
    }
  }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • Spring IOC容器基于XML外部属性文件的Bean管理

    Spring IOC容器基于XML外部属性文件的Bean管理

    这篇文章主要为大家介绍了Spring IOC容器Bean管理XML外部属性文件,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-05-05
  • Spring中的AOP操作你了解吗

    Spring中的AOP操作你了解吗

    这篇文章主要为大家详细介绍了Spring中的AOP操作,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-02-02
  • springboot集成开发实现商场秒杀功能

    springboot集成开发实现商场秒杀功能

    这篇文章主要介绍了springboot集成实现商品秒杀功能,秒杀系统业务流程,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-12-12
  • 一篇文章带你搞定JAVA泛型

    一篇文章带你搞定JAVA泛型

    泛型是Java中的高级概念,也是构建框架必备技能,比如各种集合类都是泛型实现的,今天详细聊聊Java中的泛型概念,希望有所收获
    2021-07-07
  • Spring温故而知新系列教程之AOP代理

    Spring温故而知新系列教程之AOP代理

    Spring AOP 是代理模式的应用,可以使用JDK提供的Proxy类或通过字节码增强来实现。下面这篇文章主要给大家介绍了关于Spring之AOP代理的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下
    2018-05-05
  • Java Springboot之Spring家族的技术体系

    Java Springboot之Spring家族的技术体系

    今天带大家来学习Spring家族的技术体系,文中有非常详细的图文介绍及代码示例,对正在学习java的小伙伴们很有帮助,需要的朋友可以参考下
    2021-05-05
  • Jmeter如何将每次测试的结果保存到文件中

    Jmeter如何将每次测试的结果保存到文件中

    这篇文章主要介绍了Jmeter如何将每次测试的结果保存到文件中的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-03-03
  • Java面向对象的封装特征深度解析

    Java面向对象的封装特征深度解析

    在面向对象程式设计方法中,封装(英语:Encapsulation)是指一种将抽象性函式接口的实现细节部分包装、隐藏起来的方法。封装可以被认为是一个保护屏障,防止该类的代码和数据被外部类定义的代码随机访问
    2021-10-10
  • Java 生成带Logo和文字的二维码

    Java 生成带Logo和文字的二维码

    这篇文章主要介绍了Java 生成带Logo和文字的二维码的方法,帮助大家更好的理解和学习使用Java,感兴趣的朋友可以了解下
    2021-04-04
  • java如何实时动态获取properties文件的内容

    java如何实时动态获取properties文件的内容

    这篇文章主要介绍了java如何实时动态获取properties文件的内容,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-09-09

最新评论