leetcode改进 Reverse Pairs
2017-09-12 21:03
260 查看
昨天轻易使用sort处理感到不妥,今天仔细思考了一下,想到一种改进方案。
首先分析sort为何不好
sort应当是O(nlogn)的复杂度,但是那个函数里原本是O(n)的复杂度,所以sort使得算法更加复杂,不妥,对此,我选择直接多使用一次O(n)的循环对两边进行排序,也就是说相当于额外写一遍归并排序,代码如下:
可以看到比之前快了一些。。。
不过好像还不是很快。。。。
emmm也许需要参考之前有看到过的利用快排的思想解决问题的方法了
首先分析sort为何不好
sort应当是O(nlogn)的复杂度,但是那个函数里原本是O(n)的复杂度,所以sort使得算法更加复杂,不妥,对此,我选择直接多使用一次O(n)的循环对两边进行排序,也就是说相当于额外写一遍归并排序,代码如下:
class Solution { public: void merge(vector<int> &nums, int left, int mid, int right, int &cnt) { if (left >= right) return; int lp = mid; int rp = right; int l = mid; int r = right; vector<int> temp; while (lp >= le 4000 ft && rp >= mid+1) { long x = nums[lp]; long y = nums[rp]; if (x > 2 * y) { cnt += (rp-mid); lp--; } else { rp--; } } while (l >= left && r >= mid+1) { int a = nums[l]; int b = nums[r]; if (a > b) { temp.push_back(nums[l]); l--; } else { temp.push_back(nums[r]); r--; } } while (l >= left) { temp.push_back(nums[l]); l--; } while (r >= mid+1) { temp.push_back(nums[r]); r--; } for (int i = left, j = right-left; i <= right, j >= 0; i++, j--) { nums[i] = temp[j]; } } void divide(vector<int> &nums, int left, int right, int &cnt) { if (left >= right) return; int mid = (left + right) / 2; divide(nums, left, mid, cnt); divide(nums, mid+1, right, cnt); merge(nums, left, mid, right, cnt); } int reversePairs(vector<int>& nums) { int cnt = 0; divide(nums, 0, nums.size()-1, cnt); return cnt; } };
可以看到比之前快了一些。。。
不过好像还不是很快。。。。
emmm也许需要参考之前有看到过的利用快排的思想解决问题的方法了
相关文章推荐
- 2017-09-15 LeetCode_493 Reverse Pairs
- leetcode 79. Word Search 改进版本的dfs算法
- LeetCode week 1 : Reverse Pairs(493)
- Submission Details [leetcode] 算法的改进
- Submission Details [leetcode] 算法的改进
- Leetcode493——Reverse Pairs
- leetcode493——Reverse Pairs
- leetcode之counting bits改进算法
- leetcode---Count Primes---素数筛法的改进
- [LeetCode] 3-SUM 改进
- [LeetCode] Reverse Pairs 翻转对
- leetcode练习 Reverse Pairs
- <LeetCode OJ>Delete Node in a Linked List【237】
- Leetcode 074
- LeetCode 39. Combination Sum
- [python][leetcode]Intersection of Two Arrays II
- 剑指Offer面试题7 & Leetcode232
- LeetCode 279 Perfect Squares 题解
- [Leetcode]Add Two Numbers链表数相加
- Leetcode 计划