Leetcode题解-3Sum&3Sum Closest
来源:互联网 发布:hp m1136驱动下载 mac 编辑:程序博客网 时间:2024/05/16 12:01
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基础上多声明一个变量来记录最靠近目标值的和
代码
3Sum
class 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; }};
阅读全文
0 0
- LeetCode题解:3sum closest
- LeetCode题解:3Sum Closest
- [LeetCode]3Sum Closest题解
- Leetcode题解-3Sum&3Sum Closest
- 3Sum Closest题解
- 题解:3Sum Closest
- leetcode 题解 || 3Sum Closest 问题
- LeetCode 题解(76): 3Sum Closest
- LeetCode题解——3Sum Closest
- LeetCode题解-16-3Sum Closest
- 16. 3Sum Closest LeetCode题解
- leetcode题解-16. 3Sum Closest
- 【LeetCode】3Sum,3Sum Closest 题解报告
- leetcode题解-15. 3Sum && 16. 3Sum Closest
- 【Leetcode】3Sum Closest (Sum)
- LeetCode: 3 Sum Closest
- leetcode - 3 sum closest
- leetcode 3Sum Closest
- 浅谈HTML与HTML5的区别
- 周末总结--2017.11.12
- 习题6.1
- Open CV 学习开发笔记之ROI(Region Of Interest)感兴趣区域(三)
- 首次发布
- Leetcode题解-3Sum&3Sum Closest
- Java自学笔记之struts2异常处理
- JAVA冒泡
- 积极加班,负责任的工作
- ASCII,Unicode,UTF-8
- SpringBoot—入门
- PriorityBlockingQueue 简单实用例子
- 多线程
- JAVA并行