【一天一道LeetCode】#18. 4Sum
来源:互联网 发布:大数据修仙 起点 编辑:程序博客网 时间:2024/05/17 18:44
一天一道LeetCode
(一)题目
Given an array S of n integers, are there elements a, b, c, and d in S such that a + b + c + d = target? Find all unique quadruplets in the array which gives the sum of target.
Note: Elements in a quadruplet (a,b,c,d) must be in non-descending
order. (ie, a ≤ b ≤ c ≤ d) The solution set must not contain duplicate
quadruplets.For example, given array S = {1 0 -1 0 -2 2}, and target = 0.A solution set is:(-1, 0, 0, 1)(-2, -1, 1, 2)(-2, 0, 0, 2)
(二)解题
勉强不超时的代码。(注:和3sum比较类似)
class Solution {public: vector<vector<int>> fourSum(vector<int>& nums, int target) { vector<vector<int>> result; if(nums.size()<4) return result; sort(nums.begin(),nums.end()); for(int i = 0 ; i < nums.size()-3 ; ) { for(int j=i+1 ; j < nums.size()-2 ; ) { int start = j+1; int end = nums.size()-1; while(start<end) { int sum = nums[i]+nums[j]+nums[start]+nums[end]; if(sum==target) { vector<int> vec; vec.push_back(nums[i]); vec.push_back(nums[j]); vec.push_back(nums[start]); vec.push_back(nums[end]); result.push_back(vec); start++; while(start<end && nums[start] == nums[start-1]) start++; end--; while(start<end && nums[end] == nums[end+1]) end--; } else if(sum>target) { end--; while(start<end && nums[end] == nums[end+1]) end--; } else { start++; while(start<end && nums[start] == nums[start-1]) start++;; } } j++; while(j<nums.size()-2 && nums[j] == nums[j-1]) j++; } i++; while(i<nums.size()-3 && nums[i] == nums[i-1]) i++; } return result; }};
0 0
- 【一天一道LeetCode】#18. 4Sum
- 【一天一道LeetCode】 #1 Two Sum
- 【一天一道LeetCode】#15 3Sum
- 【一天一道LeetCode】#16. 3Sum Closest
- 【一天一道LeetCode】#39. Combination Sum
- 【一天一道LeetCode】#40. Combination Sum II
- 【一天一道LeetCode】#112. Path Sum
- 【一天一道LeetCode】#113. Path Sum II
- 【一天一道LeetCode】#64. Minimum Path Sum.md
- 【一天一道LeetCode】#371. Sum of Two Integers
- 【一天一道LeetCode】#303.Range Sum Query - Immutable
- 一天一道leetcode
- 【一天一道LeetCode】#46. Permutations
- 【一天一道LeetCode】#77. Combinations
- 【一天一道LeetCode】#78. Subsets
- 【一天一道LeetCode】#120. Triangle
- 【一天一道LeetCode】#4 Median of Two Sorted Arrays
- 【一天一道leetcode】 #2 Add Two Numbers
- java入门
- BroadCastReceiver 简介
- ZOJ 3802Easy 2048 Again(状压DP)
- error C2664 无法将参数 从“const char []”转换为“LPCTSTR
- NYOJ 7 街区最短路径问题
- 【一天一道LeetCode】#18. 4Sum
- fasta格式 图解
- codeforces gym 100548G
- iOS开发学习笔记----objective-c之block初探
- Lightoj1253(博弈+NIM)
- 【BZOJ1103】【POI2007】大都市meg
- C++: 二维数组作函数参数
- OpenStack for Mitaka安装分享
- leetcode 67. Add Binary