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];
    }
  }
}

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

相关文章

  • 模仿百度红包福袋界面实例代码

    模仿百度红包福袋界面实例代码

    新年到新年到,红包抢不停。在我抢红包的时候意外的发现了百度的福袋界面挺不错的,于是抽时间专门写篇文章来完成百度红包界面吧
    2016-02-02
  • Java多线程之ThreadLocal浅析

    Java多线程之ThreadLocal浅析

    这篇文章主要分析了Java多线程ThreadLocal,ThreadLocal叫做线程变量,用于在多线程环境下创建线程本地变量。想了解更多的可以参考本文
    2023-04-04
  • PowerJob的CleanService清理服务流程

    PowerJob的CleanService清理服务流程

    这篇文章主要为大家介绍了PowerJob的CleanService清理服务流程源码解读,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪<BR>
    2024-02-02
  • 关于SpringBoot配置文件application.properties的路径问题

    关于SpringBoot配置文件application.properties的路径问题

    这篇文章主要介绍了关于SpringBoot配置文件application.properties的路径问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-08-08
  • lambda表达式与传统接口函数实现方式对比详解

    lambda表达式与传统接口函数实现方式对比详解

    这篇文章主要为大家介绍了lambda表达式与传统接口函数实现方式对比详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家度偶多进步早日升职加薪
    2022-03-03
  • Java中使用内存映射实现大文件上传实例

    Java中使用内存映射实现大文件上传实例

    这篇文章主要介绍了Java中使用内存映射实现大文件上传实例,本文对比测试了FileInputStream 或者FileOutputStream 抑或RandomAccessFile的频繁读写操作,最后总结出映射到内存后进行读写以提高速度,需要的朋友可以参考下
    2015-01-01
  • 启动Tomcat报错Unsupported major.minor version xxx的解决方法

    启动Tomcat报错Unsupported major.minor version xxx的解决方法

    这篇文章主要为大家详细介绍了启动Tomcat报错Unsupported major.minor version xxx的解决方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-11-11
  • 教你java面试时如何聊单例模式

    教你java面试时如何聊单例模式

    这篇文章主要给大家介绍了关于Java单例模式推荐的几种模式,文中通过示例代码介绍的非常详细,对大家学习或者使用Java具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2021-06-06
  • 解决idea update project 更新选项消失的问题

    解决idea update project 更新选项消失的问题

    这篇文章主要介绍了解决idea update project 更新选项消失的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-01-01
  • springboot2.1.7去除json返回字段中为null的字段

    springboot2.1.7去除json返回字段中为null的字段

    这篇文章主要介绍了springboot2.1.7去除json返回字段中为null的字段,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-12-12

最新评论