LeetCode-中等-16. 最接近的三数之和
题目:
引用自:16. 最接近的三数之和(如有侵权联系删除)
给定一个包括 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
解题:
没什么好说的,还是先排序,然后固定a循环往后走,同时用b,c双标记法。
代码:
import java.util.Arrays;
//注意这次用的java写的
public class Solution {
public int threeSumClosest(int[] nums, int target) {
nums = Arrays.stream(nums).sorted().toArray();
int min = nums[0] + nums[1] + nums[2] - target;
int num = min + target;
int a = 0, b = 0, c = 0, temp = 0;
while (a < nums.length - 2){
b = a + 1;
c = nums.length - 1;
while (b < c){
temp = nums[a] + nums[b] + nums[c] - target;
if(Math.abs(temp) < Math.abs(min)){
min = temp;
num = temp + target;
//System.out.printf("更新了min:%d, a:%d, b:%d, c:%d \n",min,a,b,c);
}
if(temp > 0){
c--;
}else if (temp < 0){
b++;
}else {
return temp + target;
}
}
a++;
}
return num;
}
}