LeetCode 3Sum Closest 最接近目標數的三個數和
阿新 • • 發佈:2019-01-05
3Sum Closest
Given an arraySofnintegers, find three integers inSsuch 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差不多,不過也有不一樣的,主要是:
1 這裡不用判斷處理重複問題
2 要比較其中的三個數的和與目標數的差的大小。
class Solution { public: int threeSumClosest(vector<int> &num, int target) { switch (num.size()) { case 0: return 0; case 1: return num[0]; case 2: return num[0] + num[1]; default: break; } sort(num.begin(), num.end()); int closet = 0; int sum = 0; int i = 0, j = 0, k = num.size()-1; int diff = INT_MAX; for (i = 0; i < k-1; i++) { for (j = i+1; j < k;) { sum = num[i] + num[j] + num[k]; if (sum == target) { return sum; } if (abs(sum-target) < diff) { closet = sum; diff = abs(sum - target); } if (sum < target) { j++; } else { k--; } } } return closet; } };
//2014-1-25 update8.24 class Solution125 { public: int threeSumClosest(vector<int> &num, int target) { int closest = INT_MAX; int res = 0; sort(num.begin(), num.end()); for (int i = 0; i < num.size(); i++) { for (int j = i+1, k = num.size()-1; j < k; ) { int sum = num[i]+num[j]+num[k]; if (sum == target) return sum; int t = abs(sum-target); if (t<closest) { res = sum; closest = t; } if (sum < target) j++; else if (sum > target) k--; } while (i < num.size() && num[i] == num[i+1]) i++; } return res; } };