Leetcode_3sum-closest
2014-04-24 22:56
411 查看
地址:http://oj.leetcode.com/problems/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.
思路:上一题的变形。参考:http://blog.csdn.net/flyupliu/article/details/24438255
参考代码:
SECOND TRIAL
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).
思路:上一题的变形。参考:http://blog.csdn.net/flyupliu/article/details/24438255
参考代码:
class Solution { public: int threeSumClosest(vector<int> &num, int target) { int min_val = 1<<30, ans = 0; sort(num.begin(), num.end()); for(int i = 0; i < num.size()-2; ++i) { if(i && num[i]==num[i-1]) continue; int left = i + 1, right = num.size() - 1; while(left < right) { if(right<num.size()-2 && num[right]==num[right+1]) { --right; continue; } if(num[i]+num[left]+num[right]==target) return target; else if (num[i]+num[left]+num[right]>target) { if(min_val > num[i]+num[left]+num[right] - target) { ans = num[i]+num[left]+num[right]; min_val = num[i]+num[left]+num[right] - target; } --right; } else { if(min_val > target - (num[i]+num[left]+num[right])) { ans = num[i]+num[left]+num[right]; min_val = target-(num[i]+num[left]+num[right]); } ++left; } } } return ans; } };
SECOND TRIAL
class Solution { public: int threeSumClosest(vector<int> &num, int target) { int diff = INT_MAX, ans = 0; sort(num.begin(), num.end()); for(int i = 0; i<num.size()-2; ++i) { if(i && num[i]==num[i-1]) continue; for(int j = num.size()-1; j>i+1; --j) { if(j < num.size()-1 && num[j]==num[j+1]) continue; for(int k = i + 1; k < j; ++k) { if(k>i+1 && num[k]==num[k-1]) continue; if(abs(num[i]+num[j]+num[k]-target)<diff) { diff = abs(num[i]+num[j]+num[k]-target); ans = num[i]+num[j]+num[k]; if(!diff) return target; } } } } return ans; } };
相关文章推荐
- Leetcode 16. 3sum closest
- LeetCode 016 3Sum Closest
- leetcode:3Sum Closest
- 【Leetcode】3Sum Closest
- leetcode16. 3Sum Closest
- Leetcode 刷题: 3Sum Closest
- leetcode 3Sum Closest
- LeetCode 3Sum Closest
- Leetcode 16 - 3Sum Closest
- [Leetcode] 16 - 3Sum Closest
- [LeetCode][Java] 3Sum Closest
- LeetCode之16_3Sum Closest
- leetcode-16 3Sum Closest
- leetcode:2sum,2sumSorted,3sum,3sumClosest,4sum,4sumII.[哈希表,双指针]
- leetcode 016 —— 3Sum Closest
- LeetCode——3Sum Closest
- LeetCode 3Sum Closest
- LeetCode--3Sum Closest
- LeetCode 16: 3Sum Closest
- Leetcode 16 3Sum Closest