`

Leetcode - 3Sum Closest

 
阅读更多
Given an array S of n integers, find three integers in S such that the sum is closest to a given number, target. Return the sum of the three integers. You may assume that each input would have exactly one solution.

    For example, given array S = {-1 2 1 -4}, and target = 1.

    The sum that is closest to the target is 2. (-1 + 2 + 1 = 2).

[分析] 基于 3 sum的思路求解,先排序,选定第一个元素,然后夹逼法求出当前第一个元素下最接近target的 sum3。注意到closest初始化不要写成整数的最大最小值,不然比较获取局部最优时(if (Math.abs(sum3 - target) < Math.abs(closest - target)))会溢出导致错误结果。

public int threeSumClosest(int[] nums, int target) {
        if (nums == null || nums.length < 3)
            return Integer.MAX_VALUE;
        int N = nums.length;
        Arrays.sort(nums);
        int closest = nums[0] + nums[1] + nums[2];
        int sum3;
        for (int k = 0; k < N - 2; k++) {
            if (k > 0 && nums[k] == nums[k - 1])
                continue;
            int i = k + 1, j = N - 1;
            while (i < j) {
                sum3 = nums[i] + nums[j] + nums[k];
                if (sum3 == target) {
                    return target;
                } else if (sum3 > target) {
                    if (Math.abs(sum3 - target) < Math.abs(closest - target))
                        closest = sum3;
                    while (i < --j && nums[j] == nums[j + 1]);
                } else {
                    if (Math.abs(sum3 - target) < Math.abs(closest - target))
                        closest = sum3;
                    while (++i < j && nums[i] == nums[i - 1]);
                }
            }
        }
        return closest;
    }
分享到:
评论

相关推荐

    c语言-leetcode 0016-three-sum-closest.zip

    c c语言_leetcode 0016_three_sum_closest.zip

    js-leetcode题解之16-3sum-closest.js

    js js_leetcode题解之16-3sum-closest.js

    leetcode-cpp刷题

    - **2.1.9 3Sum Closest** - 找到三个数之和最接近给定目标值的组合。 - 实现思路:类似于3Sum,但在查找过程中记录与目标值差距最小的组合。 - **2.1.10 4Sum** - 在数组中找到四个数之和等于零的所有组合。 ...

    _leetcode-python.pdf

    - 3Sum / 3Sum Closest / 4Sum: 这些题目都涉及到在数组中寻找具有特定和的数字组合,这通常需要用到双指针技术。 - Remove Nth Node From End of List: 给定一个链表,删除链表中的第n个节点。 - Valid Parentheses...

    lrucacheleetcode-Leetcode-Practice:私人LeetCode练习代码库

    3sum-closest 49组字谜 更新 2020-1-16 123 已完成问题447 个回旋镖 更新 2020-1-17 124 已完成问题149 最大单线点数 更新 2020-1-18 126题已完成 56 个合并间隔 86 分区列表 98 验证二进制搜索树 9 审查问题 第105...

    leetcode卡-LeetCode-HashTable:此存储库包含HashTable探索卡中所有问题的解决方案

    4. **最近点对**:在“最接近的三数之和”(3Sum Closest)问题中,双指针配合哈希表可以快速找到与目标值最接近的三数之和。 5. **滑动窗口最大值/最小值**:例如“数组中的最长连续序列”(Longest Consecutive ...

    javalruleetcode-LeetCode::lollipop:个人LeetCode习题解答仓库-多语言

    java lru leetcode :ice_cream: ...Closest 20 Valid Parentheses 26 Remove Duplicates from Sorted Array 48 Rotate Image 53 Maximum Subarray 55 Jump Game 56 Merge Intervals 64 Minimum Path Sum 73

    leetcode答案-LeetCode_1_TwoSum:LeetCode_1_TwoSum

    答案LeetCode_1_TwoSum LeetCode 问题:给定一个整数数组,找出两个数字,使它们相加为特定的目标数字。 函数 twoSum 应该返回两个数字的索引,使它们相加为目标,其中 index1 必须小于 index2。 请注意,您返回的...

    算法刷题笔记leetcode/lintcode

    - 3 Sum Closest(三数之和最接近) - Remove Duplicates from Sorted Array(删除有序数组中的重复项) - Remove Duplicates from Sorted Array II(删除排序数组中的重复项II) - Merge Sorted Array(合并两...

    leetcode1-200题源码(c++)

    9. 题目16:3Sum Closest (最接近的三数之和) 给定一个包含n个整数的数组nums,找出其中三个数使得它们的和与目标值target最接近。使用排序和双指针法可以高效解决。 10. 题目68:文本Justify (文本左右对齐) 该...

    leetcode和oj-LeetCode:力码

    leetcode 和 oj #问题列表(按标题升序) 标题|添加日期|AC 利率 ---|---|---|--- 3Sum |2012-01-17|16.4% 3Sum Closest|2012-01-18|26.8% 4Sum|2012-01-26 |21.3% 二进制加法|2012-04-02|25.6% 两个数相加|2011-11-...

    LeetCode最全代码

    16 | [3 Sum Closest](https://leetcode.com/problems/3sum-closest/) | [C++](./C++/3sum-closest.cpp) [Python](./Python/3sum-closest.py) | _O(n^2)_ | _O(1)_ | Medium || Two Pointers 18| [4 Sum]...

    js代码-16. 3Sum Closest

    描述中的 "3Sum Closest" 是指三数之和最接近某个特定值的问题,通常在LeetCode等在线编程平台上被讨论。 这个问题的基本设定是:给定一个整数数组 `nums` 和一个目标整数 `target`,你需要找出数组中三个整数,...

    leetcode338-LeetCode:LeetCode刷题总结

    LeetCode刷题总结 1.Two Sum 2.Add Two Numbers 3.Longest Substring Without Repeating Characters 4.Median of Two Sorted Arrays 5.Longest Palindromic Substring (Manacher算法待完成) 6.ZigZag Conversion 7....

    leetcode2sumc-LeetCode_record:Leetcode问题我已经完成了解决方案和简要说明

    leetcode 2 和 c LeetCode_record(C++) Leetcode 问题 我已经完成了解决方案和简要说明。 目前,我正在做热门面试问题。 完毕 ...15-3总和 16-3Sum Closest(无解,类似3Sum) 454-4和II 正在做 18-4和

    程序员面试宝典LeetCode刷题手册

    16. 3Sum Closest 17. Letter Combinations of a Phone Number 18. 4Sum 19. Remove Nth Node From End of List 20. Valid Parentheses 21. Merge Two Sorted Lists 22. Generate Parentheses 23. Merge k Sorted ...

    leetcode题库-LeetCode:力码

    leetcode题库 LeetCode 题解合集 本仓库展示了LeetCode题库中部分题目的解法(持续更新),所有代码均采用C++编写...3Sum.cpp 最接近的三数之和 3Sum Closest .cpp 20 有效的括号 Valid Parentheses.cpp 22 括号生成 G

    leetcode530-algorithm:算法

    leetcode 530 ** LeetCode ...3Sum 016 3Sum Closest 017 Letter Combinations of a Phone Number 018 4Sum 020 Valid Parentheses 022 Generate Parentheses 028 Implement strStr() 031 Next Permutat

    leetcode2sumc-leetcode:JavaScript版本leetcode中文版代码

    leetcode 2 sum c leetcode 力扣(Leetcode)编程题,JavaScript版本。 编号 中文题目 ...3Sum 中等 16 3Sum Closest 中等 17 Letter Combinations of a Phone Number DFS 中等 18 4Sum 中等 19 Remo

Global site tag (gtag.js) - Google Analytics