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

image

posted @ 2022-01-18 17:23  Dre_am_tale  阅读(18)  评论(0编辑  收藏  举报