LeetCode 3Sum Closest

来源:互联网 发布:斯维尔是什么软件 编辑:程序博客网 时间:2024/06/06 02:48

题目

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).

 

和前一题很类似,只是和变成了target,依然可以做到n^2

依旧按同样的思想操作。只是在和为target时直接返回;不为target时比较是否比当前最接近target的和更接近,是则暂存。

 

代码:

const int MAX=0x7fffffff;class Solution {public:    int threeSumClosest(vector<int> &num, int target) {int ans=MAX;long long sum;//三数和int dsum=MAX;//最接近的sum和target的差的绝对值int dt;//本次探测sum和target的差int size=num.size();sort(num.begin(),num.end());int i=0,j=1,k=size-1;while(j<k)//外循环{while(j<k)//Two Sum问题{sum=num[i]+num[j]+num[k];dt=abs(sum-target);if(sum==target)return target;else if(sum<target){if(dt<dsum){ans=sum;dsum=dt;}j++;}else{if(dt<dsum){ans=sum;dsum=dt;}k--;}}i++;j=i+1;k=size-1;}return ans;    }};


 

 

 

0 0
原创粉丝点击