lintcode59. 最接近的三数之和

给一个包含 n 个整数的数组 S, 找到和与给定整数 target 最接近的三元组,返回这三个数的和。

样例
例1:

输入:[2,7,11,15],3
输出:20
解释:
2+7+11=202:

输入:[-1,2,1,-4],1
输出:2
解释:
-1+2+1=2
挑战
O(n^2) 时间, O(1) 额外空间。

注意事项
只需要返回三元组之和,无需返回三元组本身
class Solution {
public:
    /**
     * @param numbers: Give an array numbers of n integer
     * @param target: An integer
     * @return: return the sum of the three integers, the sum closest target.
     */
    int threeSumClosest(vector<int> &numbers, int target) {
        // write your code here
        int min=INT_MAX;
        int res;
        int left;
        int right;
        sort(numbers.begin(),numbers.end());
        for (int i = 0; i < numbers.size()-2; i++) {
            /* code */
            left=i+1;
            right=numbers.size()-1;
            while(left<right)
            {
                int sum=numbers[i]+numbers[left]+numbers[right];
                if(abs(sum-target)<min) {min=abs(sum-target);res=sum;}
                if(sum<target) left++;
                else if(sum>target) right--;
                else if(sum==target) break;
            }
        }
        return res;
    }

};
发布了366 篇原创文章 · 获赞 13 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_43981315/article/details/104009156