LeetCode-4Sum
2013-07-12 20:43
330 查看
类似于3Sum,固定两个指针,然后让另外两个指针指向剩余元素的头和尾,开始向中间靠拢。时间复杂度是O(n^3).
class Solution { public: vector<vector<int> > fourSum(vector<int> &num, int target) { // Start typing your C/C++ solution below // DO NOT write int main() function vector<vector<int> > vec; if (num.size() < 4) return vec; sort(num.begin(), num.end()); for (vector<int>::size_type i = 0; i < num.size() - 3; ++i) { if (num[i] > target && target >= 0) break; for (vector<int>::size_type j = i + 1; j < num.size() - 2; ++j) { int sum2 = num[i] + num[j]; if (sum2 > target && target >= 0) break; vector<int>::size_type k = j + 1, m = num.size() - 1; while (k < m) { int sum4 = sum2 + num[k] + num[m]; if (sum4 == target) { vector<int> vec1; vec1.push_back(num[i]); vec1.push_back(num[j]); vec1.push_back(num[k]); vec1.push_back(num[m]); vec.push_back(vec1); while (k < m && num[k] == num[k + 1]) ++k; while (m > k && num[m] == num[m - 1]) --m; ++k; --m; } else if (sum4 > target) { --m; } else { ++k; } } while (j < num.size() - 2 && num[j] == num[j + 1]) ++j; } while (i < num.size() - 3 && num[i] == num[i + 1]) ++i; } return vec; } };
相关文章推荐
- [LeetCode]4Sum
- LeetCode 18: 4Sum
- 【leetcode】18. 4Sum
- leetcode 18. 4Sum
- 4Sum_leetCode
- Leetcode: 4Sum
- [LeetCode] 4Sum
- LeetCode:4Sum
- [leetcode] 4Sum
- leetcode 4Sum(Java)
- [LeetCode]18 4Sum
- Leetcode 18. 4Sum
- LeetCode 4Sum
- LeetCode--4Sum
- Leetcode-18. 4Sum
- leetcode: 4Sum
- 【Leetcode】【Medium】4Sum
- LeetCode:3Sum, 3Sum Closest, 4Sum
- LeetCode 18. 4Sum
- Leetcode-2sum,3sum,4sum