Leetcode习题记录——3Sum Closest

来源:互联网 发布:淘宝店铺优惠券在哪 编辑:程序博客网 时间:2024/06/06 01:27

题目: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.

第一种方法:采用最简单的思路,做两次循环,并使用两个指针

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

我一直在思考有没有更加简单的方法,但一直没有收获;

class Solution {public:    int threeSumClosest(vector<int>& nums, int target) {        int closest = nums[0] + nums[1] + nums[2];        int diff = abs(closest - target);        sort(nums.begin() , nums.end());        for (int i = 0 ; i < nums.size() - 2; i++){            int left = i + 1 ;            int right = nums.size() - 1 ;            while (left < right){                int sum  = nums[i] + nums[left] + nums[right];                int new_diff = abs(sum - target);                if(new_diff == 0)                    return target;//判断为零,即得到接近的值                if(new_diff < diff){                    diff = new_diff;                    closest = sum;                }                if (sum > target)                    right--;                else                    left++;            }        }        return closest;    }};

但我通过加了一句判断语句,就使程序运行时间从19ms减少到6ms
这里写图片描述

原创粉丝点击