LINTCODE——逆序对
2017-09-19 16:25
169 查看
LINTCODE——逆序对
思路:本来直接统计的,结果TIMEOUT,后来改用归并排序统计,通过了,就一个注意的,数组num分成L,mid,R三段时,如果L<=i<=mid ,mid+1 <= j <=R,此刻如果num[j] < num[i] ,那么对于J来说就有mid+i-1个逆序对;
思路:本来直接统计的,结果TIMEOUT,后来改用归并排序统计,通过了,就一个注意的,数组num分成L,mid,R三段时,如果L<=i<=mid ,mid+1 <= j <=R,此刻如果num[j] < num[i] ,那么对于J来说就有mid+i-1个逆序对;
class Solution { private : long long count = 0; vector<int> num; public: /* * @param A: an array * @return: total of reverse pairs */ long long reversePairs(vector<int> &A) { // write your code here int R = A.size() - 1, L = 0 ; num.resize(R+1,0); sort(A , L , R ); return count; } void sort(vector<int> &A , int L ,int R ) { if(R <= L) return; int mid = (L+R)>>1; sort(A,L,mid); sort(A,mid+1,R); merge(A,L,mid ,R); } void merge(vector<int> &A , int L ,int mid ,int R ) { for(int x = L ; x <= R ; x++) num[x] = A[x] ; for(int k = L ,i = L ,j = mid+1; k <= R ; k++ ) { if( i > mid) A[k] = num[j++]; else if(j > R) A[k] = num[i++]; else if(num[j] < num[i]) { A[k] = num[j++]; count += (mid - i + 1); } else A[k] = num[i++]; } } };
相关文章推荐
- lintcode:逆序对
- LintCode-381.螺旋矩阵 II
- lintcode:有效回文串
- lintcode,转换字符串到整数
- LintCode:M-丢失的第一个正整数
- LintCode —— 2. 尾部的零
- Lintcode - 整数排序 II
- lintcode刷题——丢失的第一个正整数
- lintcode-搜索二维矩阵 java
- lintcode,螺旋矩阵
- LintCodet题目
- LintCode 135. Combination Sum
- Lintcode119 Edit Distance solution 题解
- LintCode-Convert BST to Greater Tree
- Lintcode181——将整数A转换为B
- lintcode Convert BST to Greater Tree
- lintcode[363]:接雨水
- lintcode 8.旋转字符串
- LintCode 5. Kth Largest Element
- LintCode Copy Books