2021-09-03剑指Offer51.数组中的逆序对
class Solution {int[] nums, tmp;//表示未分配长度的数组指针?//java的默认权限是共有还是私有?public int reversePairs(int[] nums) {this.nums = nums;tmp = new int[nums.length];//到底是length()还是lengthreturn mergeSort(0, nums.length - 1);}private int mergeSort(int l, int r) {// 终止条件if (l >= r) return 0;//拆分到只有0个或者一个就终止递归// 递归划分int m = (l + r) / 2;int res = mergeSort(l, m) + mergeSort(m + 1, r);// 合并阶段int i = l, j = m + 1;//i为左边数组开头的指针,j为右边数组开头的指针for (int k = l; k <= r; k++)tmp[k] = nums[k];//将子串拷贝到一个暂时存储起来//为什么需要这样做呢?for (int k = l; k <= r; k++) {if (i == m + 1)nums[k] = tmp[j++];//如果左边开头的指针和右边数组开头的指针重合,说明没有逆序对,直接将右边的数组放入原来的数组当中else if (j == r + 1 || tmp[i] <= tmp[j])nums[k] = tmp[i++];//第一个条件判断说明右边的已经放完了,//第二个条件判断说明左边的一直小于右边的,不断的将左边的放入数组即可else {nums[k] = tmp[j++];res += m - i + 1; // 统计逆序对//右边的较小,放入右边的,此时左边指针所指向的数字和左边数组末尾所构成的区间所有的都比右边的大,都可以组成逆序对}}return res;}
}作者:jyd
链接:https://leetcode-cn.com/problems/shu-zu-zhong-de-ni-xu-dui-lcof/solution/jian-zhi-offer-51-shu-zu-zhong-de-ni-xu-pvn2h/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
基础思想是在递归合并的时候计算交换的次数来获得逆序对的个数。
具体的调用过程如下:以长度为4的数组为例。
merg(0,3)
merg(0,1)
merg(0,0)//此时只有一个字符,立即返回
然后进入到右枝,merg(1,1)完成之后立刻返回。
2021-09-03剑指Offer51.数组中的逆序对相关推荐
- 剑指Offer_35_数组中的逆序对
题目描述 在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对.输入一个数组,求出这个数组中的逆序对的总数P.并将P对1000000007取模的结果输出. 即输出P%1000 ...
- 剑指offer 数组中的逆序对
题目描述 在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对.输入一个数组,求出这个数组中的逆序对的总数P.并将P对1000000007取模的结果输出. 即输出P%1000 ...
- 剑指offer35——数组中的逆数对
题目:在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对.输入一个数组,求出这个数组中的逆序对的总数. 一种直观的思路是通过暴力破解的方法,时间复杂度为O(N*N).除此以 ...
- 剑指offer 数组中的逆数对
链接:https://www.nowcoder.com/profile/8740530/codeBookDetail?submissionId=9156674 来源:牛客网class Solution ...
- 剑指offer:数组中的逆序对
题目描述 在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对.输入一个数组,求出这个数组中的逆序对的总数P.并将P对1000000007取模的结果输出. 即输出P%1000 ...
- 剑指offer03.数组中重复的数字
剑指offer03.数组中重复的数字 题目 第一种解法 第二种解法 第三种解法 值得一提的东西 题目 在一个长度为 n 的数组 nums 里的所有数字都在 0-n-1 的范围内.数组中某些数字是重复的 ...
- 剑指offer之数组中的逆序对
1 问题 在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对.输入一个数组,求出这个数组中的逆序对的总数P.并将P对1000000007取模的结果输出. 即输出P%1000 ...
- 【剑指offer】_12 数组中的逆序对
题目描述 在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对.输入一个数组,求出这个数组中的逆序对的总数P.并将P对1000000007取模的结果输出. 即输出P%1000 ...
- 【LeetCode】剑指 Offer 51. 数组中的逆序对
[LeetCode]剑指 Offer 51. 数组中的逆序对 文章目录 [LeetCode]剑指 Offer 51. 数组中的逆序对 package offer;public class Soluti ...
最新文章
- 莱特准则 matlab,初学MATLAB,遇到一简单的题目,一点头绪也没有啊.99
- 编程方法学9:字符串
- ConditionObject源码
- 本地存储localStorage
- BugkuCTF-MISC题Photo的自我
- HashMap在并发场景下踩过的坑
- 最全整理:中国人工智能百强企业(100)榜单
- Tinker生成补丁包
- natapp使用教程
- ps时间轴制作渐隐动态签名
- 爬取当当网评论(1)
- c语言文字居中,如何设置select和option的文字居中?
- 网络安全——Cobaltstrike
- 产品读书《简约至上 : 交互式设计四策略》
- Linux工具篇 | Ubuntu安装string命令
- SMTP协议:使用telnet发邮件【纯纯小白】
- 使用 UnrealPak.exe 创建 Pak文件方法
- java 仿百度文库源码_java开发_模仿百度文库_OpenOffice2PDF_源码下载
- DC010的精华分享【首发速看】
- MongoDB和MongoTemplate模拟SQL的ifNull