#532 Reverse Pairs
来源:互联网 发布:大麦盒子安装软件 编辑:程序博客网 时间:2024/06/05 15:51
题目描述:
For an array A, if i < j, and A [i] > A [j], called (A [i], A [j]) is a reverse pair.
return total of reverse pairs in A.
Example
Given A = [2, 4, 1, 3, 5]
, (2, 1), (4, 1), (4, 3)
are reverse pairs. return 3
Tags
题目思路:这题没有merge sort的提示我还真是想不出来,主要是利用了merge sort在merge two sorted array的过程中,会发现reverse pair的关系,然后利用这个来进行计算。code部分和merge sort非常类似,只是merge和mergeSort函数返回的都是reverse pair count。在merge两个sorted array时,如果发现了tmp[l] > tmp[r]的关系,那么l和它之后的所有数都比tmp[r]大,所以count上加的number是l(包括l)之后数字个数的总和。
Mycode(AC = 82ms):
class Solution {public: /** * @param A an array * @return total of reverse pairs */ long long reversePairs(vector<int>& A) { // Write your code here return mergeSort(A, 0, A.size() - 1); } long long mergeSort(vector<int>& A, int start, int end) { if (start >= end) { return 0; } long long left = mergeSort(A, start, (start + end) / 2); long long right = mergeSort(A, 1 + (start + end) / 2, end); return merge(A, start, (start + end) / 2 + 1, end) + left + right; } long long merge(vector<int>& A, int start, int mid, int end) { if (start >= end) return 0; // assign A values into tmp vector<int> tmp(end - start + 1, 0); int idx = 0; for (int i = start; i <= end; i++) { tmp[idx++] = A[i]; } // merge 2 sorted arrays int l = 0, r = mid - start; long long count = 0; idx = start; while (l < mid - start && r < tmp.size()) { if (tmp[l] <= tmp[r]) { A[idx++] = tmp[l++]; } else { // if tmp[l] > tmp[r], then there exists // mid - start - l pairs (because all elements // after l are also larger than tmp[r]). A[idx++] = tmp[r++]; count += mid - start - l; } } // put the rest of values into merged array while (l < mid - start) { A[idx++] = tmp[l++]; } while (r < tmp.size()) { A[idx++] = tmp[r++]; } return count; }};
0 0
- #532 Reverse Pairs
- LintCode 532:Reverse Pairs
- Reverse Pairs
- Count Reverse Pairs - C++
- 493. Reverse Pairs
- 493. Reverse Pairs
- [LeetCode]493. Reverse Pairs
- 493. Reverse Pairs
- leetCode:493. Reverse Pairs
- 493. Reverse Pairs
- lintcode-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
- 字符串匹配的KMP算法
- 382. Linked List Random Node
- 修改使能linux串口登录方式(buildroot 文件系统)
- struts包版本和tomcat版本兼容解决问题
- ZigBee基本概念和组网特性
- #532 Reverse Pairs
- JAVA中子类能不能继承父类的私有属性和方法?
- android .9.png 图片解析
- c++字符串的讲解
- easyui datagrid 自适应窗口边宽度
- iOS设计模式 ——单例模式详解以及严格单例模式注意点
- PHP判断图片格式的7种方法
- MapReduce编程基础—学习笔记[2]
- SSD MyDetect记录