每日一题3

题目:

16. 最接近的三数之和

class Solution {
    public int threeSumClosest(int[] nums, int target) {
        Arrays.sort(nums);   //数组排序
        int min = Integer.MAX_VALUE;  //整数最大值
        int ans = 0;
        int len = nums.length;
        for (int i = 0; i < len; i++) {
            if (i > 0 && nums[i] == nums[i - 1]) {  // 第一个不相等的数
                continue;
            }
            int start = i + 1;  // 左边界指针
            int end = len - 1;  // 右边界指针
            while (start < end) {
                int value = nums[i] + nums[start] + nums[end];
                if (value == target) {  // 如果相等,则最接近直接返回即可
                    return value;
                }
                if (Math.abs(value - target) < min) {
                    min = Math.abs(value - target);
                    ans = value;   //更新最接近的值
                }
                if (value > target) {   // 如果和大于目标值,则右指针减小
                    end--;
                } else {
                    start++;  // 如果和小于目标值,则右指针变大
                }
            }
        }
        return ans;
    
    }
}

参考解析:双指针

image-20230220150901903

posted @ 2023-02-21 13:46  ZLey  阅读(12)  评论(0编辑  收藏  举报