您的位置:首页 > 其它

LeetCode:3Sum Closest

2014-04-16 00:00 309 查看
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).
先排序,然后左右夹逼,复杂度 O(n2 )。

// 先排序,然后左右夹逼,时间复杂度 O(n^2),空间复杂度 O(1)
class Solution {
    public:
        int threeSumClosest(vector& num, int target) {
            int result = 0;
            int min_gap = INT_MAX;
            sort(num.begin(), num.end());
            for (auto a = num.begin(); a != prev(num.end(), 2); ++a) {
                auto b = next(a);
                auto c = prev(num.end());
                while (b < c) {
                    const int sum = *a + *b + *c;
                    const int gap = abs(sum - target);
                    if (gap < min_gap) {
                        result = sum;
                        min_gap = gap;
                    }
                    if (sum < target) ++b;
                    else
                        --c;
                }
            }
            return result;
        }
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: