//    题目描述
//    在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。
//    输入一个数组,求出这个数组中的逆序对的总数P。并将P对1000000007取模的结果输出。 即输出P%1000000007}//    题目保证输入的数组中没有的相同的数字
//
//    数据范围:
//
//    对于%50的数据,size<=10^4
//
//    对于%75的数据,size<=10^5
//
//    对于%100的数据,size<=2*10^5//    public static int InversePairs(int[] array) {        超时
//        int count = 0;
//        for (int i=0; i<array.length;i++){
//            for (int j=i+1;j<array.length;j++){
//                if (array[i]>=array[j]){
//                    count++;
//                }
//            }
//        }
//        return count%1000000007;
//    }public static int InversePairs(int[] arr) {int[] temp = new int[arr.length];//在排序前,先建好一个长度等于原数组长度的临时数组,避免递归中频繁开辟空间return sort(arr, 0, arr.length - 1, temp);}private static int sort(int[] arr, int left, int right, int[] temp) {if (left >= right) {return 0;}int count = 0;int mid = (left + right) / 2;int leftCount = sort(arr, left, mid, temp);//左边归并排序,使得左子序列有序int rightCount = sort(arr, mid + 1, right, temp);//右边归并排序,使得右子序列有序int i= mid;int j=right;while (i>=left&&j>mid){if (arr[i]>arr[j]){count += j-mid;//不加判断通过50%if(count>=1000000007)//数值过大求余
                {count%=1000000007;}i--;}else{j--;}}merge(arr, left, mid, right, temp);//将两个有序子数组合并操作//75%通过
//        return count + leftCount + rightCount;return (count + leftCount + rightCount)%1000000007;}private static void merge(int[] arr, int left, int mid, int right, int[] temp) {int i = left;//左序列指针int j = mid + 1;//右序列指针int t = 0;//临时数组指针while (i <= mid && j <= right) {if (arr[i] <= arr[j]) {temp[t++] = arr[i++];} else {temp[t++] = arr[j++];}}while (i <= mid) {//将左边剩余元素填充进temp中temp[t++] = arr[i++];}while (j <= right) {//将右序列剩余元素填充进temp中temp[t++] = arr[j++];}t = 0;//将temp中的元素全部拷贝到原数组中while (left <= right) {arr[left++] = temp[t++];}}

转载于:https://www.cnblogs.com/kaibing/p/9046474.html

牛客(35)数组中的逆序对相关推荐

  1. 剑指offer编程题(JAVA实现)——第35题:数组中的逆序对

    github https://github.com/JasonZhangCauc/JZOffer 剑指offer编程题(JAVA实现)--第35题:数组中的逆序对 题目描述 在数组中的两个数字,如果前 ...

  2. 《剑指offer》-- 数组中的逆序对、最小的K个数、从1到n整数中1出现的次数、正则表达式匹配、数值的整数次方

    一.数组中的逆序对: 1.题目: 数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对.输入一个数组,求出这个数组中的逆序对的总数P.并将P对1000000007取模的结果输出 ...

  3. vb.net中递归退到最外层_数组中的逆序对

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

  4. 数组中的逆序对python

    牛客网上的剑指offer编程题 题目: 在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对.输入一个数组,求出这个数组中的逆序对的总数P.并将P对1000000007取模的 ...

  5. 剑指offer之【数组中的逆序对】

    题目: 数组中的逆序对 链接: https://www.nowcoder.com/practice/96bd6684e04a44eb80e6a68efc0ec6c5?tpId=13&tqId= ...

  6. 剑指offer之数组中的逆序对

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

  7. 数组中的逆序对-------归并排序应用

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

  8. 剑指offer:数组中的逆序对

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

  9. C++求数组中的逆序对

    C++求数组中的逆序对. 如果在数组中的两个数字如果前面的一个数字大于后面的数字,则这两个数字组成一个逆序对.输入一个数组,求出这个数组中的逆序对的总数 #include<iostream> ...

最新文章

  1. 使用getopt处理shell脚本的参数
  2. 使用GDAL将12bit量化图像转为16bit或者8bit
  3. dependencies与dependencyManagement的区(转自:http://blog.csdn.net/liutengteng130/article/details/46991829)
  4. Nacos的服务注册表结构是怎样的?
  5. javaEE项目部署方式
  6. Shell记录-Shell命令(其他)
  7. 全自动迁移数据库的实现 (Fluent NHibernate, Entity Framework Core)
  8. Struts2的Action中访问servletAPI方式
  9. 图片生成html_markdown 生成头条文章的一个实现
  10. 捕捉异常_Python通过try....except...else捕捉和处理异常
  11. linux设备驱动模型一字符设备open系统调用流程
  12. ev3无需使用计算机编程,Legoev3机器人怎么编程.docx
  13. 解决应用程序无法正常启动0xc0150002等问题
  14. Hadoop原理与安装
  15. 腾讯地图api_让数据跃然“图”上!腾讯位置服务数据可视化API正式发布
  16. repo: error: no branches ready for upload 问题解决方法
  17. 数据结构电梯模拟 100梯1000层 不限梯数
  18. 背篼酥课堂第八课--APP开发--app图形化编程
  19. java poi 填充单元格_POI操作excel表格(建立工作薄、创建工作表、将数据填充到单元格中)...
  20. 使用OpenCV采集摄像头的视频并保存为文件

热门文章

  1. 浅谈我的销售体会(一)
  2. C语言字符型、整型和变量的长度
  3. 【多线程】ThreadPoolExecutor 类的使用详解
  4. 【全文搜索引擎】Elasticsearch之模糊查询
  5. 最后一次作业-----课程总结
  6. Spring Boot 2 快速教程:WebFlux Restful CRUD 实践(三)
  7. Runtime Errors:CALL_FUNCTION_REMOTE_ERROR/CALL_FUNCTION_NOT_REMOTE
  8. GUI编程笔记(java)04:GUI(HelloWorld)窗体案例
  9. 分布式检索系统的简单设计
  10. 《101 Windows Phone 7 Apps》读书笔记-PASSWORDS SECRETS