码迷,mamicode.com
首页 > 其他好文 > 详细

16. 3Sum Closest

时间:2017-05-20 21:10:43      阅读:227      评论:0      收藏:0      [点我收藏+]

标签:find   input   evel   else   get   mos   ble   begin   style   

Problem statement:

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

Solution:

It is a change for 15. 3Sum, but quite similar, this problem requires to return the sum of three numbers which is most close to the target.

Just do the absolute value test when we update the index, left and right, keep the closest sum and return at the end or in the loop. 

Time complexity, two level loops, O(n * n).

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

 

16. 3Sum Closest

标签:find   input   evel   else   get   mos   ble   begin   style   

原文地址:http://www.cnblogs.com/wdw828/p/6883080.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!