【leetcode】16. 3Sum Closest

来源:互联网 发布:在淘宝上怎么退换货 编辑:程序博客网 时间:2024/05/01 15:33

思路:首先排序,然后枚举第一个元素,之后对另外两个元素进行夹逼,

同时不断计算最优值。2个地方可以优化:已经枚举过的相同的元素可以跳过,

其次,有3个值刚好等于target可以直接返回

/**  * @author          johnsondu  * @problem         3Sum Closest * @url             https://leetcode.com/problems/3sum-closest/ * @timeComlexity   O(n^2)  * @spaceComplexity O(1)  * @strategy        Inserting each number nums[i] into a hash table,  *                    and then for each index i and j, checking the minimm gap. * @status          Accepted, runtime beats 56.19% of cpp submissions. 12ms * @time            19:34, Oct 21 2015  */   class Solution {public:    int Abs(int x) { return x < 0 ? -x : x; }        int threeSumClosest(vector<int>& nums, int target) {        int ans = nums[0] + nums[1] + nums[2];        sort(nums.begin(), nums.end());        for(int i = 0; i < nums.size() - 2; i ++) {            if(i > 0 && nums[i] == nums[i-1]) continue;            int a = nums[i];            int lf = i + 1;            int rt = nums.size() - 1;            while(lf < rt) {                int b = nums[lf];                int c = nums[rt];                if(a + b + c > target) rt --;                else if(a + b + c < target) lf ++;                else return target;                if(Abs(a+b+c-target) < Abs(ans-target)) ans = a + b + c;            }        }        return ans;    }};


0 0
原创粉丝点击