每天一题LeetCode【第14天】

T16. 3Sum Closest【Medium

题目

给一个有 n 个整数的数组 S,找到 S 中的三个数,使得这三个数的和最接近传入的target(目标数)。并返回这三个数的 sum(和)。你何以假设每个输入都有一个确切的解答。

举个例子,如果给出数组 S = [-1, 2, 1, -4],并且 target(目标数) = 1

最接近的 sum 是 2.(-1 + 2 + 1 = 2)

思路

具体可以看代码注释~

代码

代码取自 Top Solution,稍作注释

 public int threeSumClosest(int[] num, int target) {
        //初始一个result
        int result = num[0] + num[1] + num[num.length - 1];
        //给num排序
        Arrays.sort(num);
        for (int i = 0; i < num.length - 2; i++) {
            int start = i + 1, end = num.length - 1;
            //在while中num[i]是一定的,选出的是i时,i后面的数和i能组成的离target最近的sum
            while (start < end) {
                int sum = num[i] + num[start] + num[end];
                //sum>target要减小sum,因为排好序了,所以end--
                if (sum > target) {
                    end--;
                } else {       //sum<=target时同理
                    start++;
                }
                //若相差小,则更新result值
                if (Math.abs(sum - target) < Math.abs(result - target)) {
                    result = sum;
                }
            }
        }
        return result;
    }

补充

这题发现当从数组里面挑选数相加为一个目标数是时,可以用先把数组排序,从两边往里相加凑数这样的方法。

之前写的类似的解法:T15 3Sum

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 背景 一年多以前我在知乎上答了有关LeetCode的问题, 分享了一些自己做题目的经验。 张土汪:刷leetcod...
    土汪阅读 14,358评论 0 33
  • 第5章 引用类型(返回首页) 本章内容 使用对象 创建并操作数组 理解基本的JavaScript类型 使用基本类型...
    大学一百阅读 8,895评论 0 4
  • leetcode刷题记录本文记录一下leetcode刷题记录,记录一下自己的解法和心得。 LeetCode Two...
    EarthChen阅读 8,850评论 0 6
  • Leetcode 题目 本文将不断更新,主要内容为解决Leetcode中的算法问题,有比较难的题目可能会单独成文档...
    机智的马里奥阅读 8,097评论 6 13
  • 侠哥 我们的客栈在里格村,到达客栈的时候已是下午三点钟,太阳依旧火辣辣地烘烤着大地,侠哥一听我们愿意跟他去篝火晚会...
    陈小猫阅读 3,696评论 0 3

友情链接更多精彩内容