[LeetCode]3Sum Closest

来源:互联网 发布:php云人才系统破解版 编辑:程序博客网 时间:2024/05/20 10:23

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

class Solution {public:    int threeSumClosest(vector<int> &num, int target)  {  int ans;bool ansFind = false;sort(num.begin(), num.end());if (num.size() == 3){return num[0] + num[1] + num[2];}for (int i = 0; i < num.size() - 2; i++){for (int left = i + 1, right = num.size() - 1; left < right; ){int temp = num[i] + num[left] + num[right];if(temp < target){left++;//遇到重复的数字,快速处理while (num[left] == num[left - 1]&& left < right){left++;}}else if(temp > target){right--;//遇到重复的数字,快速处理while(num[right] == num[right+1]&& left < right){right--;}} else{return target;}//ansFind用来判断ans是否已经被赋过值,用于第一次的初始化if (!ansFind || abs(target - temp) < abs(target - ans)){ans = temp;ansFind = true;}}}return ans;            }};


0 0