每日一题---16. 最接近的三数之和[力扣][Go]

简介: 每日一题---16. 最接近的三数之和[力扣][Go]

题目描述

给定一个包括 n 个整数的数组 nums 和 一个目标值 target。找出 nums 中的三个整数,使得它们的和与 target 最接近。返回这三个数的和。假定每组输入只存在唯一答案。

解题代码

这一题思路和三数之和相似。

func threeSumClosest(nums []int, target int) int {
  res := nums[0] + nums[1] + nums[2]
  // 获取和 target 相差几个数
  sum := int(math.Abs(float64(nums[0] + nums[1] + nums[2] - target)))
  // 给数组排序,确定左右指针如何移动
  sort.Ints(nums)
  n := len(nums)
  for i:=0; i< n - 1;i++{
    n1 := nums[i]
    if i > 0 && n1 == nums[i - 1] {
      continue
    }
    l := i + 1
    r := n - 1
    for l < r {
      n2 := nums[l]
      n3 := nums[r]
      if sum > int(math.Abs(float64(n1 + n2 + n3 - target))) {
        sum = int(math.Abs(float64(n1 + n2 + n3 - target)))
        res = n1 + n2 + n3
      }
      if n1 + n2 + n3 - target < 0 {
        l ++
      } else {
        r --
      }
    }
  }
  return res
}

提交结果


相关文章
|
6月前
|
Go C++
【力扣】2696. 删除子串后的字符串最小长度(模拟 栈 C++ Go实现栈)
【2月更文挑战第18天】2696. 删除子串后的字符串最小长度(模拟 栈 C++ Go实现栈)
59 6
|
3月前
|
算法
LeetCode第16题最接近的三数之和
该文章介绍了 LeetCode 第 16 题最接近的三数之和的解法,与第 15 题类似,通过双指针法减少循环次数,根据差值的绝对值来更新最接近的和,并总结了双指针可减少循环次数的要点。
|
3月前
|
Python
【Leetcode刷题Python】16. 最接近的三数之和
解决LeetCode "最接近的三数之和" 问题的Python实现,通过排序和双指针法,记录并更新与目标值最接近的三数之和。
37 1
|
5月前
|
存储 算法 数据挖掘
LeetCode第十六题: 掌握双指针技巧 最接近的三数之和 【python】
LeetCode第十六题: 掌握双指针技巧 最接近的三数之和 【python】
|
6月前
|
Go C++
【力扣】2645. 构造有效字符串的最小插入数(动态规划 贪心 滚动数组优化 C++ Go)
【2月更文挑战第17天】2645. 构造有效字符串的最小插入数(动态规划 贪心 滚动数组优化 C++ Go)
44 8
|
6月前
leetcode-16:最接近的三数之和
leetcode-16:最接近的三数之和
50 0
【LeetCode-每日一题】-16. 最接近的三数之和
【LeetCode-每日一题】-16. 最接近的三数之和
|
11月前
|
Java
1657. 确定两个字符串是否接近 --力扣 --JAVA
如果可以使用以下操作从一个字符串得到另一个字符串,则认为两个字符串 接近 : 操作 1:交换任意两个 现有 字符。 例如,abcde -> aecdb 操作 2:将一个 现有 字符的每次出现转换为另一个 现有 字符,并对另一个字符执行相同的操作。 例如,aacabb -> bbcbaa(所有 a 转化为 b ,而所有的 b 转换为 a ) 你可以根据需要对任意一个字符串多次使用这两种操作。 给你两个字符串,word1 和 word2 。如果 word1 和 word2 接近 ,就返回 true ;否则,返回 false 。
43 0
LeetCode: 16. 最接近的三数之和 | 双指针专题
【LeetCode: 16. 最接近的三数之和 | 双指针专题 】
56 1
|
存储 算法 Python
【力扣算法01】之最接近的三数之和
【力扣算法01】之最接近的三数之和
80 0