最接近的三数之和

给定一个包括 n 个整数的数组 nums 和 一个目标值 target。找出 nums 中的三个整数,使得它们的和与 target 最接近。返回这三个数的和。假定每组输入只存在唯一答案。

参考了之前的三数之和的双指针算法,对撞指针思想。

class Solution {
public:
    int threeSumClosest(vector<int>& nums, int target) {
        int min = INT_MAX;
        int result;
        if(nums.empty()) return 0;
        sort(nums.begin(), nums.end());
       
        for(int i = 0; i < nums.size(); i++) {
            int fix = nums[i];
            if(i > 0){
                if(nums[i] == nums[i-1]) continue;
            }
            int left = i+1;
            int right = nums.size()-1;
            while(left < right) {
                if(nums[left]+nums[right]+fix == target  ){
                    return target;                                
                } else if(nums[left]+nums[right]+fix > target){   
                    int tmp = nums[left]+nums[right]+fix-target;
                    if(min > tmp){
                        min = tmp;
                        result = tmp+target;
                    }
                    right--;                    
                } else {
                    int tmp = target - (nums[left]+nums[right]+fix);
                    if (min > tmp){
                        min = tmp;
                        result = target-tmp;
                    }
                    left++;                    
                }
            }
        }
        return result;
    }
};

 

posted @ 2019-07-26 12:05  卷积  阅读(380)  评论(0编辑  收藏  举报