博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
剑指offer(35)数组中的逆序对
阅读量:4961 次
发布时间:2019-06-12

本文共 1318 字,大约阅读时间需要 4 分钟。

题目描述

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

输入:题目保证输入的数组中没有的相同的数字

数据范围:

  • 对于%50的数据,size<=10^4
  • 对于%75的数据,size<=10^5
  • 对于%100的数据,size<=2*10^5

 

题目分析

第一反应是采用暴力解法,不过肯定会超时,所以我们需要用时间复杂度更低的解法.

说实话这道题有点难,我也是参考剑指offer上的。那么难点在哪呢?

  • 难点一:要想到基于归并排序去解决。
  • 难点二:参数的问题,这里很巧妙地用了一个copy数组作为data参数。
  • 难点三:合并时,count如何计数。

不过只要注意这些小细节,多花点时间想明白还是能做出来的.

代码

function InversePairs(data) {  if (!data || data.length < 2) return 0;  const copy = data.slice();  let count = 0;  count = mergeCount(data, copy, 0, data.length - 1);  return count % 1000000007;}function mergeCount(data, copy, start, end) {  if (start === end) return 0;  const mid = end - start >> 1,    left = mergeCount(copy, data, start, start + mid), // 注意参数,copy作为data传入    right = mergeCount(copy, data, start + mid + 1, end); // 注意参数,copy作为data传入  let [p, q, count, copyIndex] = [start + mid, end, 0, end];  while (p >= start && q >= start + mid + 1) {    if (data[p] > data[q]) {      copy[copyIndex--] = data[p--];      count = count + q - start - mid;    } else {      copy[copyIndex--] = data[q--];    }  }  while (p >= start) {    copy[copyIndex--] = data[p--];  }  while (q >= start + mid + 1) {    copy[copyIndex--] = data[q--];  }  return count + left + right;}

 

 

 

转载于:https://www.cnblogs.com/wuguanglin/p/InversePairs.html

你可能感兴趣的文章
Gold Smith第一章
查看>>
生成php所需要的APNS Service pem证书的步骤
查看>>
JavaWeb之JSON
查看>>
URL中的特殊字符处理
查看>>
HOT SUMMER 每天都是不一样,积极的去感受生活 C#关闭IE相应的窗口 .
查看>>
windows平台上编译mongdb-cxx-driver
查看>>
optionMenu-普通菜单使用
查看>>
MVC3分页传2参
查看>>
2016-2017-2点集拓扑作业[本科生上课时]讲解视频
查看>>
appium(13)- server config
查看>>
IIS负载均衡-Application Request Route详解第六篇:使用失败请求跟踪规则来诊断ARR...
查看>>
管理信息系统 第三部分 作业
查看>>
[Leetcode Week13]Search a 2D Matrix
查看>>
查看端口占用cmd命令
查看>>
2019.01.17王苛震作业
查看>>
Halcon学习(八)文本操作
查看>>
MFC电子词典
查看>>
简单工厂(Simple Factory)
查看>>
04: 打开tornado源码剖析处理过程
查看>>
02: 安装epel 解决centos7无法使用yum安装nginx
查看>>