16. 3Sum Closest Medium

来源:互联网 发布:外卖系统源码 编辑:程序博客网 时间:2024/05/16 12:35

这道题和之前那道 3Sum 的做法是一样的,大致思想是这样的:先排序,然后从第一个元素开始遍历,固定一个值之后,取接下来第一个元素和最后一个元素为左右坐标,分别为left,right,然后求和,如果小于target,让left加一,反之,让right加一,就这样遍历,效率最高。

这道题与 3Sum 不同的是,需要判断是不是离target最近,这里可以用两数相减后的绝对值来比较距离然后做取舍

代码如下(居然只有9ms)

class Solution {public:    int threeSumClosest(vector<int>& nums, int target) {    int size = nums.size();    if(size == 0)return 0;        sort(nums.begin(), nums.end());        int now_sum = nums[0] + nums[1] + nums[2];        for (int i = 0; i < size; ++i)        {        int left = i + 1, right = size - 1;                while(left < size && right < size && left < right){        //cout << nums[i] << " " << nums[left] << " " << nums[right] << endl;        int try_sum = nums[left] + nums[right] + nums[i];        //cout << try_sum  << " " << now_sum << endl;        if(abs(try_sum - target) < abs(now_sum - target))        now_sum = try_sum;        if(try_sum < target) left++;        else if(try_sum > target) right--;        else if(try_sum == target)  break;        }                }        return now_sum;    }};


1 0
原创粉丝点击