关闭

3Sum Closest

75人阅读 评论(0) 收藏 举报
分类:
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;
			}
		}

	}
};

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:41714次
    • 积分:1022
    • 等级:
    • 排名:千里之外
    • 原创:59篇
    • 转载:33篇
    • 译文:0篇
    • 评论:8条
    最新评论