Reverse Pairs
来源:互联网 发布:哪个直播软件有黄播 编辑:程序博客网 时间:2024/06/05 18:11
Reverse Pairs
Given an array nums
, we call (i, j)
an important reverse pair if i < j
and nums[i] > 2*nums[j]
.
You need to return the number of important reverse pairs in the given array.
Example1:
Input: [1,3,2,3,1]Output: 2
Example2:
Input: [2,4,3,5,1]Output: 3
Note:
- The length of the given array will not exceed
50,000
. - All the numbers in the input array are in the range of 32-bit integer.
利用归并排序的思路,也叫分割重现关系,用式子表示是T(i,j)=T(i,m)+T(m+1,j)+C,其中C表示翻转对的两个数字分别在子数组nums[i,m]和nums[m+1,j]之间,满足要求的翻转对数,若果我们对这两个数组都是排好序的,那么可以在线性时间内求出翻转对数,我们利用递归思路对两个子数组排序然后求翻转对数。
代码:
class Solution {public: int reversePairs(vector<int>& nums) { return mergesort(nums,0,nums.size()-1); } int mergesort(vector<int> &nums, int left,int right) { if (left>=right) return 0; int mid=(left+right)/2; int ans=0; ans=mergesort(nums,left,mid)+mergesort(nums,mid+1,right); int first=mid; int second=right; while ((first>=left)&&(second>=(mid+1))) { long long t1=nums[first]; long long t2=(long long )(nums[second])*2; if (t1>t2) { ans+=(second-mid); first--; } else { second--; } } sort(nums.begin()+left,nums.begin()+right+1); return ans; } };
0 0
- Reverse Pairs
- Count Reverse Pairs - C++
- #532 Reverse Pairs
- 493. Reverse Pairs
- 493. Reverse Pairs
- [LeetCode]493. Reverse Pairs
- 493. Reverse Pairs
- leetCode:493. Reverse Pairs
- 493. Reverse Pairs
- lintcode-Reverse Pairs
- LintCode 532:Reverse Pairs
- leetcode练习 Reverse Pairs
- leetcode改进 Reverse Pairs
- LeetCode493. Reverse Pairs(Hard)
- leetcode493. Reverse Pairs
- 493. Reverse Pairs
- Leetcode:493. Reverse Pairs
- leetcode 493. Reverse Pairs
- 获取直播流的sps信息
- 群体遗传学--哈温定律
- 秒杀活动倒计时 iOS代码实现
- Linux学习之十三(bash脚本编程之条件判断)
- QDataStream写文件操作-writeBytes与writeRawData区别
- Reverse Pairs
- iOS9自动布局神器StackView
- MFC中使用自定义资源
- layout_marginStart和layout_marginEnd
- 配置maven环境变量一定要配置JDK环境变量吗?
- C# 基础
- TK1学习笔记六:安装ROS
- maven项目pom.xml文件的构造
- html5柱状图编写、数字提示和单位设置