1. 程式人生 > 其它 >LeetCode-016-最接近的三數之和

LeetCode-016-最接近的三數之和

最接近的三數之和

題目描述:給定一個包括 n 個整數的陣列 nums 和 一個目標值 target。找出 nums 中的三個整數,使得它們的和與 target 最接近。返回這三個數的和。假定每組輸入只存在唯一答案。

示例說明請見LeetCode官網。

來源:力扣(LeetCode)
連結:https://leetcode-cn.com/problems/3sum-closest/
著作權歸領釦網路所有。商業轉載請聯絡官方授權,非商業轉載請註明出處。

解法一:雙指標法

首先將陣列排序,獲取一個初始的結果difference,然後第一個數字first從第一個數字開始遍歷,第二個數字second和第三個數字third

分別從之後的陣列中從兩邊向中間遍歷,遍歷過程中如果與targetdifference更接近,則更新difference,直到遍歷完成,返回difference對應的result

說明:解法和 LeetCode-015-三數之和 這個題目的解法類似,可對比參考。

import java.util.Arrays;

public class Solution {
    /**
     * 雙指標法
     * @param nums
     * @param target
     * @return
     */
    public static int threeSumClosest(int[] nums, int target) {
        if (nums.length == 3) {
            return nums[0] + nums[1] + nums[2];
        }
        Arrays.sort(nums);

        int result = nums[0] + nums[1] + nums[2];
        int difference = Math.abs(result - target);
        // 第一個數字
        for (int first = 0; first < nums.length - 2; first++) {
            //過濾掉重複的
            if (first > 0 && nums[first] == nums[first - 1]) {
                continue;
            }
            for (int second = first + 1; second < nums.length - 1; second++) {
                if (second > first + 1 && nums[second] == nums[second - 1]) {
                    // 過濾掉重複的
                    continue;
                }

                int third = nums.length - 1;
                while (second < third) {
                    // 當3個數之和比當前的result更接近時,更新result
                    if (Math.abs(nums[first] + nums[second] + nums[third] - target) < difference) {
                        result = nums[first] + nums[second] + nums[third];
                        difference = Math.abs(result - target);
                    }
                    third--;
                }
            }
        }
        return result;
    }

    public static void main(String[] args) {
        int[] nums = new int[]{0, 1, 2, 3, 4, 5, 6};
        System.out.println(threeSumClosest(nums, 2));
    }
}

【每日寄語】健康自己就是最大的關愛別人。