59.最接近的三数之和

描述

给一个包含 n 个整数的数组 S, 找到和与给定整数 target 最接近的三元组,
返回这三个数的和。

注意事项

只需要返回三元组之和,无需返回三元组本身

样例

例如 S = [-1, 2, 1, -4] and target = 1. 和最接近 1 的三元组是 -1 + 2 + 1 = 2

挑战

O(n^2) 时间, O(1) 额外空间

注意

  1. 如果需要返回三元组,就需要像三数之和一样定义函数,定义results,进行形参传递
  1. 可以先排序,因为默认的排序算法是归并排序

思路
三数实际上就是两根指针再加上for循环

代码

public class Solution {
    /*
     * @param numbers: Give an array numbers of n integer
     * @param target: An integer
     * @return: return the sum of the three integers, the sum closest target.
     */
    public int threeSumClosest(int[] nums, int target) {
        if (nums == null || nums.length < 3) {
            return -1;
        }
        
        Arrays.sort(nums);
        // 初值
        int bestSum = nums[0] + nums[1] + nums[2];
        for (int i = 0; i < nums.length - 2; i++) {
            int start = i + 1;
            int end = nums.length - 1;
            // sum值要放到while循环里,不然start和end改变时sum,不发生变化
            while (start < end) {
                int sum = nums[i] + nums[start] + nums[end];
                if (Math.abs(sum - target) < Math.abs(bestSum - target)) {
                    bestSum = sum;
                }
                if (sum < target) {
                    start++;
                // 此处如果写成 if (sum > target),如果数组只有三个元素出现 sum == target 情况会卡住
                } else {
                    end--;
                }
            }
        }
        return bestSum;
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 背景 一年多以前我在知乎上答了有关LeetCode的问题, 分享了一些自己做题目的经验。 张土汪:刷leetcod...
    土汪阅读 12,857评论 0 33
  • 给一个包含n个整数的数组S, 找到和与给定整数target最接近的三元组,返回这三个数的和。 样例 例如S=[-1...
    2a25936eedd9阅读 1,229评论 0 1
  • 写给外地驾照到期,户口在天津的你。 其实挺简单。 准备工作是体检和拍证件照。 体检去静海医院体检大楼的二楼,对了,...
    小Q的大世界阅读 776评论 0 1
  • 抒同 怅望长情车头上,穿堂过风,晨挤变空旷。 夜尽月藏子时风,行囊素裹语渐穷。 枫叶何须香山赏,残垣陋巷,总有情怀...
    抒同阅读 269评论 0 0
  • 秦岭最高山脉太白山,跨太白县、眉县、周至县,此攻略适用于从眉县登山。 注意: 1.以下攻略适用于天气晴好,不影响行...
    常行之阅读 1,525评论 0 0

友情链接更多精彩内容