首页 > 编程语言 >#yyds干货盘点# LeetCode程序员面试金典:最接近的三数之和

#yyds干货盘点# LeetCode程序员面试金典:最接近的三数之和

时间:2023-04-04 15:39:44浏览次数:41  
标签:yyds target nums int 三数 sum j0 k0 金典

题目:

给你一个长度为 n 的整数数组 nums 和 一个目标值 target。请你从 nums 中选出三个整数,使它们的和与 target 最接近。

返回这三个数的和。

假定每组输入只存在恰好一个解。

 

示例 1:

输入:nums = [-1,2,1,-4], target = 1

输出:2

解释:与 target 最接近的和是 2 (-1 + 2 + 1 = 2) 。

示例 2:

输入:nums = [0,0,0], target = 1

输出:0

代码实现:

class Solution {
    public int threeSumClosest(int[] nums, int target) {
        Arrays.sort(nums);
        int n = nums.length;
        int best = 10000000;

        // 枚举 a
        for (int i = 0; i < n; ++i) {
            // 保证和上一次枚举的元素不相等
            if (i > 0 && nums[i] == nums[i - 1]) {
                continue;
            }
            // 使用双指针枚举 b 和 c
            int j = i + 1, k = n - 1;
            while (j < k) {
                int sum = nums[i] + nums[j] + nums[k];
                // 如果和为 target 直接返回答案
                if (sum == target) {
                    return target;
                }
                // 根据差值的绝对值来更新答案
                if (Math.abs(sum - target) < Math.abs(best - target)) {
                    best = sum;
                }
                if (sum > target) {
                    // 如果和大于 target,移动 c 对应的指针
                    int k0 = k - 1;
                    // 移动到下一个不相等的元素
                    while (j < k0 && nums[k0] == nums[k]) {
                        --k0;
                    }
                    k = k0;
                } else {
                    // 如果和小于 target,移动 b 对应的指针
                    int j0 = j + 1;
                    // 移动到下一个不相等的元素
                    while (j0 < k && nums[j0] == nums[j]) {
                        ++j0;
                    }
                    j = j0;
                }
            }
        }
        return best;
    }
}

标签:yyds,target,nums,int,三数,sum,j0,k0,金典
From: https://blog.51cto.com/u_13321676/6168707

相关文章

  • #yyds干货盘点# LeetCode面试题:二进制求和
    1.简述:给你两个二进制字符串a和b,以二进制字符串的形式返回它们的和。 示例 1:输入:a="11",b="1"输出:"100"示例 2:输入:a="1010",b="1011"输出:"10101"2.代码实现:classSolution{publicStringaddBinary(Stringa,Stringb){......
  • #yyds干货盘点# LeetCode程序员面试金典:三数之和
    题目:给你一个整数数组nums,判断是否存在三元组[nums[i],nums[j],nums[k]]满足i!=j、i!=k且j!=k,同时还满足nums[i]+nums[j]+nums[k]==0。请你返回所有和为0且不重复的三元组。注意:答案中不可以包含重复的三元组。  示例1:输入:nums=[-1,0,1,2,-1,-4]输......
  • #yyds干货盘点# LeetCode面试题:加一
    1.简述:给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一。最高位数字存放在数组的首位,数组中每个元素只存储单个数字。你可以假设除了整数0之外,这个整数不会以零开头。 示例 1:输入:digits=[1,2,3]输出:[1,2,4]解释:输入数组表示数字123。示例 2:输入:digit......
  • # yyds干货盘点 # 这里列表,我想筛选上面Tgt后的数字,用哪种方法好
    大家好,我是皮皮。一、前言前几天在Python白银交流群【像风自由】问了一个Python正则表达式处理的问题,这里拿出来给大家分享下。文字版:'D:/新标准图片/FATspotF_20230309__1_164423\\FATspotF_20230309__1_QC_1651235_Tgt288Frame1.jpg','D:/新标准图片/FATspotF_20230309__1_1644......
  • 金典 SQL笔记(2)
    因为在本地笔记上写的markdown编辑器只支持.md格式导入,图片没办法直接导进去.写的多了懒的一张一张图片切图上传;直接整个文章切成图片上传上去了. ......
  • 金典 SQL笔记(3)
    因为在本地笔记上写的.markdown编辑器只支持.md格式导入,图片没办法直接导进去.写的多了懒的一张一张图片切图上传;直接整个文章切成图片上传上去了. ......
  • 【230402-6】从集合{2,4,5,6,7,8}中选三数,使三数和可被3整除,有多少种取法?
    ......
  • #yyds干货盘点#将一维数据转化成tree
    将一维数组,转化成嵌套的treeconstarr=[{id:1,title:"child1",parentId:0},{id:2,title:"child2",parentId:0},{id:3,title:"child1_1"......
  • #yyds干货盘点#怎么找到上锁的 SQL 语句
    有的时候SQL语句被锁住了,可是通过showprocesslist找不到加锁的的SQL语句,这个时候应该怎么排查呢前提performance_schema=on;实验1、建一个表,插入三条数据mysql>us......
  • #yyds干货盘点#基于Nuxt实现Token过期自动刷新
    项目使用前后的分离的开发模式,后端使用SpringSecurity实现基于Jwt的用户认证模式,数据交互使用Json格式。前端使用Nuxt框架实现服务端渲染(SSR)功能,使用Vuex实现登录状态存储,......