Skip to content

第十六题 - 最接近的三数之和 #17

Open
@laizimo

Description

@laizimo

题目描述

给定一个包括 n 个整数的数组 nums 和 一个目标值 target。找出 nums 中的三个整数,使得它们的和与 target 最接近。返回这三个数的和。假定每组输入只存在唯一答案。

例如,给定数组 nums = [-1,2,1,-4], 和 target = 1.

与 target 最接近的三个数的和为 2. (-1 + 2 + 1 = 2).

算法

双指针法

答案

/**
 * 双指针法
 */
var threeSumClosest = function(nums, target) {
    // #1 数组排序
    nums = nums.sort((a, b) => a - b);
    // #2 取第一个数
    let ans = nums[0] + nums[1] + nums[2];
    for (let i = 0; i < nums.length ; i++) {
        // #3 设定两个指针
        let start = i + 1, end = nums.length - 1;
        while (start < end) {
            // #4 求和
            let sum = nums[start] + nums[end] + nums[i];
            // #5 比较绝对值大小
            if (Math.abs(sum - target) < Math.abs(ans - target)) ans = sum;
            // #6 如果相等,直接返回
            if (sum === target) return ans;
            // #7 根据sum大小来缩进两边指针
            sum > target ? end-- : start++;
        }
    }
    return ans;
};

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions