3Sum Closest

class Solution {
public:
	int threeSumClosest(vector<int>& nums, int target) {
		int result = nums[0] + nums[1] + nums[2];
		int gap = abs(result - target);
		//if(nums.size()<3) return result;
		sort(nums.begin(), nums.end());
		//vector<int> tmp;
		for (int i = 0; i<nums.size() - 2; i++){

			twoSumClosest(nums, i + 1, target - nums[i], result, gap);

		}
		return result;
	}

	void twoSumClosest(vector<int>& nums, int start, int target, int& result, int& gap){
		//vector<int> result;
		int left = start, right = nums.size() - 1;
		while (left<right){
			if (abs(nums[left] + nums[right] - target)<gap){
				gap = abs(nums[left] + nums[right] - target);
				result = nums[left] + nums[right] + nums[start - 1];
			}
			if (nums[left] + nums[right]<target){
				left++;
			}
			else if (nums[left] + nums[right]>target){
				right--;
			}
			else{
				gap = 0;
				result = nums[left] + nums[right] + nums[start - 1];
				break;
			}
		}

	}
};

原文地址:https://www.cnblogs.com/muyangshaonian/p/9650505.html