1. 程式人生 > >leetcode 16.最接近的三數之和

leetcode 16.最接近的三數之和

給定一個包括 n 個整數的陣列 nums 和 一個目標值 target。找出 nums 中的三個整數,使得它們的和與 target 最接近。返回這三個數的和。假定每組輸入只存在唯一答案。

例如,給定陣列 nums = [-1,2,1,-4], 和 target = 1.

與 target 最接近的三個數的和為 2. (-1 + 2 + 1 = 2).

class Solution {
public:
    int threeSumClosest(vector<int>& nums, int target) {
        sort(nums.begin(),nums.end());                   //將陣列從小到大排列
        int min = nums[0] + nums[1] + nums[2];           //設min為最小,假設nums[0]+nums[1]+nums[2]為最小
        for(int i = 0; i < nums.size() - 2; i++){        
           int m = i + 1;                                //m為左指標,為i+1
           int n = nums.size() - 1;                      //n為右指標,n為陣列最後一個下標
           while(m < n){                                 //當左指標小於右指標
             int sum = nums[i] + nums[m] +nums[n];       //求出三個數之和
             if(abs(sum - target) < abs(min - target)) min =sum;  //如果sum-target的絕對值小於min-target的絕對值,那麼使得min=sum
             if(sum < target) m++;                       //如果sum<target,左指標右移使得陣列中的數值增大
             else if(sum > target) n--;                  //如果sum>target,右指標左移使得陣列中的數值減小
             else return target;                         //如果sum=target,那麼直接返回target
            
           }         
        }              
        return min;                                      //最後返回最小值min
    }
};