前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >LeetCode-16 最接近的三数之和

LeetCode-16 最接近的三数之和

作者头像
用户3470542
发布2019-06-26 16:07:43
4880
发布2019-06-26 16:07:43
举报
文章被收录于专栏:算法半岛算法半岛

↑点击上面"算法半岛"

关注"算法半岛"第一时间接收最新文章

> 题目:16. 最接近的三数之和

> 难度:中等

> 分类:数组

> 解决方案:双指针

今天我们学习第16题最接近的三数之和,这是一道中等题。像这样数组的题目经常作为面试题来考察面试者算法能力和写代码能力,因此最好能手写出该题。下面我们看看这道题的题目描述。

题目描述

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

示例:

代码语言:javascript
复制
给定数组 nums = [-1,2,1,-4], 和 target = 1.
与 target 最接近的三个数的和为 2. (-1 + 2 + 1 = 2).

分析

这个题和LeetCode-15 三数之和的解题思路差不多,在第15题中是为了寻找满足 a+b+c=0,而在这道题中首先给出了一个目标值 target,然后寻找三个数 a+b+c的和与 target最接近,即 |a+b+c-target|的值最小。对示例分析如下图所示:

将上述分析过程转化为 java代码如下所示:

代码语言:javascript
复制
class Solution {    public int threeSumClosest(int[] nums, int target) {
        int sum =0;    // 表示数组中三个元素的和        int dis = Integer.MAX_VALUE;   // 表示数组中三个元素的和与target的距离,即|sum-target|
        // 对数组进行排序        Arrays.sort(nums);        // 遍历数组        for(int i=0; i<nums.length-2; ++i){            // 定义左指针和右指针            int left = i+1, right = nums.length-1;
            while(left<right){                // 数组中三个元素的和与target的差,即sum-target                 int diff = nums[i] + nums[left] + nums[right] - target;
                // 当sum-target == 0,则说明已经找到与target最近的数了(即target本身)                if (diff == 0)                    return target;
                // 寻找最小距离                if(Math.abs(diff) < dis){                    dis = Math.abs(diff);                    sum = diff + target;                }
                // 移动左右指针                if(diff > 0){                    --right;                }else{                    ++left;                }            }        }
        return sum;    }}

Github地址

LeetCode-16 最接近的三数之和:https://github.com/JacobLei/leetcode/blob/master/src/main/java/A16_3SumClosest.java

参考链接

16. 最接近的三数之和:https://leetcode-cn.com/problems/3sum-closest/

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-05-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 算法半岛 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 题目描述
  • 分析
  • Github地址
  • 参考链接
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档