剑指offer35——数组中的逆数对
题目:在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数。
一种直观的思路是通过暴力破解的方法,时间复杂度为O(N*N)。除此以外,我们还可以借鉴归并排序的思想来求解逆数对。
归并排序在合并数组的时候回比较前后两个数组元素的大小,在这个时候就可以得到每个元素的逆序对second-mid,时间复杂度为O(NLogN)。
注:1.cnt之所以是second-mid,是因为每当左数组的某一个元素排序时,在它前面进入temp元素的必然比它小,这个元素可以和之前进入temp的每一个元素组成逆序对,总共有second-mid对。
2.在归并排序时,每次改变的只是left到right的一部分,所以temp和num的改变范围都是l到r。
int reversePairs(vector<int>& nums) {vector<int> temp=nums;int cnt=0;merge_sort (nums,temp,0,nums.size(),cnt);return cnt;}void merge_sort(vector<int> &num,vector<int> &temp,int l,int r,int &cnt){if(l+1>=r)return ;int mid=(l+r)/2;merge_sort(num,temp,l,mid,cnt);merge_sort(num,temp,mid,r,cnt);int first=l,second=mid;int i=l;while(first<mid||second<r){if(second>=r||(num[first]<=num[second]&&first<mid)){temp[i++]=num[first++];cnt+=second-mid;}else{temp[i++]=num[second++];}}for(int i=l;i<r;++i)num[i]=temp[i];}
剑指offer35——数组中的逆数对相关推荐
- 剑指offer 数组中的逆数对
链接:https://www.nowcoder.com/profile/8740530/codeBookDetail?submissionId=9156674 来源:牛客网class Solution ...
- 剑指Offer_35_数组中的逆序对
题目描述 在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对.输入一个数组,求出这个数组中的逆序对的总数P.并将P对1000000007取模的结果输出. 即输出P%1000 ...
- 剑指offer 数组中的逆序对
题目描述 在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对.输入一个数组,求出这个数组中的逆序对的总数P.并将P对1000000007取模的结果输出. 即输出P%1000 ...
- 2021-09-03剑指Offer51.数组中的逆序对
class Solution {int[] nums, tmp;//表示未分配长度的数组指针?//java的默认权限是共有还是私有?public int reversePairs(int[] nums ...
- 剑指offer03.数组中重复的数字
剑指offer03.数组中重复的数字 题目 第一种解法 第二种解法 第三种解法 值得一提的东西 题目 在一个长度为 n 的数组 nums 里的所有数字都在 0-n-1 的范围内.数组中某些数字是重复的 ...
- 剑指OFFER----51、数组中的逆数对(js实现)
题目 在数组中的两个数字如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对. 输入一个数组,求出这个数组中的逆序对. 例如在数组 {7, 5, 6, 4} 中,一共存在 5 个逆序对, 分别是 ...
- 8. 返回数组里出现次数最多的数字_剑指offer 数组中出现次数超过一半的数字
题目描述 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字.例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}.由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2. ...
- 剑指_数组中出现次数超过一半的数字
题目描述 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字.例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}.由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2. ...
- python剑指offer数组中出现次数超过一半的数字
题目描述 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字.例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}.由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2. ...
最新文章
- C/C++ VS java
- ios 支付宝支付集成
- asp.net开发中自定义网站的目录
- crontab命令的使用
- 实例工厂配置bean
- (五)LESS 规范
- C++ STL之Vector
- 【热点】WPA2协议遭破解,全世界wifi不安全了
- 基于Spring+SpringMVC+Mybatis架构的开源博客
- 【小技巧积累】用Style实现必填提示“*”根据选项的不同而显示或隐藏
- python后端开发书籍_后端书籍推荐
- Bailian4047 全排列【全排列】
- ASCII、Unicode、GBK和UTF-8字符编码的区别联系[转]
- IDEA失去焦点,取消自动编译【已解决】
- 直播软件测试相关技巧
- lcd开机流程图_LCD1602初始化流程图及程序的两种方法
- 《汉字简体、繁体相互转换》 查看源代码
- 数据预处理1:无量纲化especially for Scaler
- 【POJ 3311】Hie with the Pie(状压DP)
- QQ群创建者和管理员