• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

关于java:LeetCode016最接近的三数之和

java 搞代码 3年前 (2022-01-28) 22次浏览 已收录 0个评论

最靠近的三数之和

题目形容:给定一个包含 n 个整数的数组 nums 和 一个目标值 target。找出 nums 中的三个整数,使得它们的和与 target 最靠近。返回这三个数的和。假设每组输出只存在惟一答案。

示例阐明请见LeetCode官网。

起源:力扣(LeetCode)
链接:https://leetcode-cn.com/probl…
著作权归领扣网络所有。商业转载请分割官网受权,非商业转载请注明出处。

解法一:双指针法

首先将数组排序,获取一个初始的后果difference,而后第一个数字first从第一个数字开始遍历,第二个数字second和第三个数字third别离从之后的数组中从两边向两头遍历,遍历过程中如果与targetdifference更靠近,则更新difference

来源gao!%daima.com搞$代*!码网

直到遍历实现,返回difference对应的result

阐明:解法和 LeetCode-015-三数之和 这个题目的解法相似,可比照参考。

<code class="java">import java.util.Arrays;

public class Solution {
    /**
     * 双指针法
     * @param nums
     * @param target
     * @return
     */
    public static int threeSumClosest(int[] nums, int target) {
        if (nums.length == 3) {
            return nums[0] + nums[1] + nums[2];
        }
        Arrays.sort(nums);

        int result = nums[0] + nums[1] + nums[2];
        int difference = Math.abs(result - target);
        // 第一个数字
        for (int first = 0; first < nums.length - 2; first++) {
            //过滤掉反复的
            if (first > 0 && nums[first] == nums[first - 1]) {
                continue;
            }
            for (int second = first + 1; second < nums.length - 1; second++) {
                if (second > first + 1 && nums[second] == nums[second - 1]) {
                    // 过滤掉反复的
                    continue;
                }

                int third = nums.length - 1;
                while (second < third) {
                    // 当3个数之和比以后的result更靠近时,更新result
                    if (Math.abs(nums[first] + nums[second] + nums[third] - target) < difference) {
                        result = nums[first] + nums[second] + nums[third];
                        difference = Math.abs(result - target);
                    }
                    third--;
                }
            }
        }
        return result;
    }

    public static void main(String[] args) {
        int[] nums = new int[]{0, 1, 2, 3, 4, 5, 6};
        System.out.println(threeSumClosest(nums, 2));
    }
}

【每日寄语】衰弱本人就是最大的关爱他人。


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:关于java:LeetCode016最接近的三数之和
喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址