493. Reverse Pairs
来源:互联网 发布:众测平台数据安全 编辑:程序博客网 时间:2024/06/01 07:37
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
这道题一看就是二分查找的典型题,再用一个同样大的数组保存元素2*nums的值,然后对这个数组排序。剩下的操作都是显而易见了,全是二分查找的基本操作,不多说了直接上代码。
class Solution {public: vector<long>::iterator find(vector<long>& tmp,long aim) { int a=0,b=tmp.size()-1; while(a<b) { int c=(a+b)/2; if(tmp[c]>aim) b=c-1; else if(tmp[c]<aim) a=c+1; else return tmp.begin()+c; } return tmp.begin()+a; } int count(vector<long>& tmp,int a) { int begin=0,end=tmp.size()-1,middle; if(end<0) return 0; while(begin<end) { middle=(begin+end)/2; if(tmp[middle]<a) begin=middle+1; else end=middle; } if(tmp[begin]>=a) return begin; else return tmp.size(); } int reversePairs(vector<int>& nums) { int n=nums.size(); vector<long >tmp(n,0); for(int i=0;i<n;i++) tmp[i]=(long )nums[i]*2L; int ans=0; sort(tmp.begin(),tmp.end()); for(int i=0;i<n;i++) { long aim=(long)nums[i]*2L; vector<long>::iterator iter=find(tmp,aim); tmp.erase(iter); ans+=count(tmp,nums[i]); } return ans; }};
1 0
- 493. Reverse Pairs
- 493. Reverse Pairs
- [LeetCode]493. Reverse Pairs
- 493. Reverse Pairs
- leetCode:493. Reverse Pairs
- 493. Reverse Pairs
- 493. Reverse Pairs
- Leetcode:493. Reverse Pairs
- leetcode 493. Reverse Pairs
- Reverse Pairs
- 来来来 再来一个逆序对 493. Reverse Pairs
- 493. Reverse Pairs(divide and conquer)
- [Leetcode] 493. Reverse Pairs 解题报告
- Count Reverse Pairs - C++
- #532 Reverse Pairs
- lintcode-Reverse Pairs
- LintCode 532:Reverse Pairs
- leetcode练习 Reverse Pairs
- 分布式数据库理解
- Promise对象的含义和基本用法
- day20 File类
- 含有中文名称的图片资源无法访问
- 机器学习数学基础学习总结(一)
- 493. Reverse Pairs
- android view宽高确定
- TensorFlow学习笔记--mnist可视化版本
- UIPickerView
- Java变量类型间的相互转换
- 用 Lua 实现一个微型虚拟机-基本篇
- 【转】CentOS添加环境变量
- 十五、Hive 安装部署及测试
- stringDemo