码迷,mamicode.com
首页 > 其他好文 > 详细

[Leetcode] 16 - 3Sum Closest

时间:2015-01-20 15:52:14      阅读:171      评论:0      收藏:0      [点我收藏+]

标签:

原题链接:https://oj.leetcode.com/problems/3sum-closest/


这道题基本就是3sum的变形,就直接按照3sum先排序,然后取当前数,再左右指针对于后面的数组向内扫描,但是因为是求closest,只有diff = 0的时候才能完全跳出当前循环,否则则需要继续扫描直到相遇或diff = 0。


所以复杂度是排序时间加上扫描时间O(nlogn + n^2)


class Solution {
public:
    int threeSumClosest(vector<int> &num, int target) {
        int diff = INT_MAX;
        int res = 0;
        sort(num.begin(), num.end());
        
        for (int i = 0; i < num.size() - 2; ++i) {
            int left = i + 1;
            int right = num.size() - 1;
            
            while (left < right) {
                int curSum = num[i] + num[left] + num[right];
                if (curSum == target) {
                    return curSum;
                } else if (curSum > target) {
                    if (abs(curSum - target) < diff) {
                        diff = abs(curSum - target);
                        res = curSum;
                    }
                    --right;
                } else {
                    if (abs(curSum - target) < diff) {
                        diff = abs(curSum - target);
                        res = curSum;
                    }
                    ++left;
                }
            }
        }
        
        return res;
    }
};




[Leetcode] 16 - 3Sum Closest

标签:

原文地址:http://blog.csdn.net/algorithmengine/article/details/42917113

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!