Leetcode 16.最接近的三数之和
Leetcode 16.最接近的三数之和
难度
中等
题目
https://leetcode-cn.com/problems/3sum-closest/
解法
双指针
普通暴力解法有三层循环,复杂度O(n^3)
利用双指针可以减少一层循环。
在判断的过程中维护三数之和和target的最近距离min,若当前三数之和与target的距离小于min,则更新min和sum。
class Solution {
public int threeSumClosest(int[] arr, int target) {
Arrays.sort(arr);
int sum = 0;
int min = Integer.MAX_VALUE;
for (int i = 0; i < arr.length - 1; i++) {
if (i != 0 && arr[i] == arr[i - 1])
continue;
int left = i + 1;
int right = arr.length - 1;
while (left < right) {
if (left != i && left != right) {
int tempSum = arr[left] + arr[right] + arr[i];
if (Math.abs(tempSum - target) < min) {
min = Math.abs(tempSum - target);
sum = tempSum;
if (min == 0)
return target;
}
if (tempSum > target)
right--;
else if (tempSum < target)
left++;
}
}
}
return sum;
}
}