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
}
};