Leetcode题解-3Sum&3Sum Closest
2017-11-12 22:30
295 查看
Leetcode题解-3Sum&3Sum Closest
3Sum
Given an array S of n integers, are there elements a, b, c in S such that a + b + c = 0? Find all unique triplets in the array which gives the sum of zero.Note: The solution set must not contain duplicate triplets.
For example, given array S = [-1, 0, 1, 2, -1, -4],
A solution set is:
[
[-1, 0, 1],
[-1, -1, 2]
]
3Sum Closest
Given an array S of n integers, find three integers in S such that the sum is closest to a given number, target. Return the sum of the three integers. You may assume that each input would have exactly one solution.For example, given array S = {-1 2 1 -4}, and target = 1. The sum that is closest to the target is 2. (-1 + 2 + 1 = 2).
思路
3Sum就是在2Sum基础上套一层循环3Sum Closest在3Sum基础上多声明一个变量来记录最靠近目标值的和
代码
3Sumclass Solution { public: vector<vector<int>> threeSum(vector<int>& nums) { vector<vector<int>> res; //if(nums.size() < 3) return res; std::sort(nums.begin(), nums.end()); cout << 1 << endl; int l = nums.size(); for(int i = 0; i < l; i++){ int target = 0 - nums[i], front = i+1, back = l-1; while(front < back){ if(nums[front] + nums[back] < target) front++; else if(nums[front] + nums[back] > target) back--; else{ vector<int> tem(3,0); tem[0] = nums[i]; tem[1] = nums[front]; tem[2] = nums[back]; res.push_back(tem); //用nums[front] == tem[1]不用nums[front] == nums[front+1]是因为nums[front+1]可能会越界 while(front < back && nums[front] == tem[1]) front++; while(front < back && nums[back] == tem[2]) back--; } } while(i+1 < l && nums[i] == nums[i+1]) i++; } return res; } };
3Sum Closest
class Solution { public: int threeSumClosest(vector<int>& nums, int target) { if(nums.size() < 3) return 0; int closest = nums[0]+nums[1]+nums[2]; sort(nums.begin(), nums.end()); for(int first = 0 ; first < nums.size()-2 ; ++first) { if(first > 0 && nums[first] == nums[first-1]) continue; int second = first+1; int third = nums.size()-1; while(second < third) { int curSum = nums[first]+nums[second]+nums[third]; if(curSum == target) return curSum; if(abs(target-curSum)<abs(target-closest)) { closest = curSum; } if(curSum > target) { --third; } else { ++second; } } } return closest; } };
相关文章推荐
- leetcode题解-16. 3Sum Closest
- [LeetCode]题解(python):016-3Sum Closest
- LeetCode题解——3Sum Closest
- LeetCode(16)题解--3Sum Closest
- LeetCode题解:3Sum Closest
- LeetCode题解——3Sum Closest
- LeetCode题解-16-3Sum Closest
- [Leetcode] 3Sum Closest
- LeetCode 3Sum Closest
- [LeetCode] 3Sum Closest
- Leetcode题解 15. 3Sum
- [leetcode] 3Sum Closest
- Leetcode || 3Sum Closest
- [leetcode]16. 3Sum Closest
- Leetcode: 3Sum Closest
- [LeetCode16]3Sum Closest
- leetcode16. 3Sum Closest
- LeetCode-16-3Sum-Closest 贪心
- leetcode_middle_99_16. 3Sum Closest
- 【LeetCode】16. 3Sum Closest