题目
给定一个包括 n 个整数的数组 nums 和 一个目标值 target。找出 nums 中的三个整数,使得它们的和与 target
最接近。返回这三个数的和。假定每组输入只存在唯一答案。例如,给定数组 nums = [-1,2,1,-4], 和 target = 1.
与 target 最接近的三个数的和为 2. (-1 + 2 + 1 = 2).
解题思路
我的思路是直接暴力解了,没想到更好的办法,时间复杂度为O(n²)。
代码如下
class Solution {
public int threeSumClosest(int[] nums, int target) {
Arrays.sort(nums);
int res = Integer.MAX_VALUE;
boolean flag = false;
for(int i = 0; i < nums.length - 2; i ++) {
int left = i+1, right = nums.length-1;
while(left < right) {
int tmp = nums[i] + nums[left] + nums[right];
if(tmp == target) {
res = 0;
flag = true;
break;
}
else if(tmp > target) {
res = Math.abs(tmp - target) > Math.abs(res) ? res : tmp - target;
right--;
}
else {
res = Math.abs(tmp - target) > Math.abs(res) ? res : tmp - target;
left++;
}
}
if(flag) break;
}
return target + res;
}
}
提交结果
成功
显示详情
执行用时 : 17 ms, 在3Sum Closest的Java提交中击败了75.39% 的用户
内存消耗 : 35.5 MB, 在3Sum Closest的Java提交中击败了87.66% 的用户