題目
給定一個包括 n 個整數的數組 nums 和 一個目標值 target。找出 nums 中的三個整數,使得它們的和與 target 最接近。返回這三個數的和。假定每組輸入只存在唯一答案。
示例:
輸入:nums = [-1,2,1,-4], target = 1
輸出:2
解釋:與 target 最接近的和是 2 (-1 + 2 + 1 = 2) 。
提示:
3 <= nums.length <= 10^3
-10^3 <= nums[i] <= 10^3
-10^4 <= target <= 10^4
鏈接:https://leetcode-cn.com/problems/3sum-closest
解題記錄
跟這個題有點相似: Leetcode:NO.15 三數之和 夾逼
- 使用枚舉法求解
- 通過控制一個數的值,剩下兩個數通過雙指針進行獲取
- i< left < right
- left.v + right.v + i.v 取到剛好大於 target爲止
- 全程比較sum和target的差值,求差值絕對值的最小值
- 差值爲0,直接返回target即可
/**
* @author ffzs
* @describe
* @date 2020/6/24
*/
public class Solution {
public int threeSumClosest(int[] nums, int target) {
int len = nums.length;
int left, right;
int min = Integer.MAX_VALUE;
int res = target;
Arrays.sort(nums);
for (int i = 0; i < len-2; ++i) {
left = i+1;
right = len-1;
while (left < right) {
int sum = nums[i] + nums[left] + nums[right];
if (sum > target) {
if ((sum - target) < min) {
min = sum - target;
res = sum;
}
right --;
}
else if (sum == target) return target;
else {
if ((target - sum) < min) {
min = target - sum;
res = sum;
}
left ++;
}
}
}
return res;
}
}