zoukankan      html  css  js  c++  java
  • 【LeetCode】16. 最接近的三数之和

    [LeetCode]16. 最接近的三数之和

    题目

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

    示例 1

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

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

    解析

    • 分析
    1. 15.三数之和类似

    2. abs(target - current) 这个值越少说明越接近

    • 算法流程
    1. 排序 - 为了能使用双指针

    2. 遍历

      1. 固定一位(i), 左右指针指向下一位与最后一位(left = i + 1 , right = n - 1
      2. 按条件遍历左右指针
        1. i + left + right == 0 : 当前和target重合了,直接返回
        2. i + left + right < 0 : 结果偏少,需要增加结果 left++(数组排序后从左往右依次增大)
        3. i + left + right > 0 : 结果偏大,需要减少结果 right--

    源码

    from typing import List
    
    
    class Solution:
        def threeSumClosest(self, nums: List[int], target: int) -> int:
            nums.sort()
    
            length = len(nums)
            res: int = nums[0] + nums[1] + nums[2]
            for i in range(length-2):
                left = i + 1
                right = length - 1
                while left < right:
                    total = (nums[i] + nums[left] + nums[right])
                    if abs(target - total) < abs(target - res):
                        res = total
    
                    if target == total:
                        return total
                    elif total > target:
                        right = right - 1
                    else:
                        left = left + 1
    
            return res
    

    引用

    LeetCode - 16. 最接近的三数之和

    源码 - GitHub

  • 相关阅读:
    超媒体
    超文本
    视频文件格式
    web.py 模板错误记录
    pip常用记录
    微信公众号绑定服务器 Flask版
    scrapy 简单防封
    python 手写队列
    jQuery个人总结
    PHP用url传递数组
  • 原文地址:https://www.cnblogs.com/WilsonPan/p/14441273.html
Copyright © 2011-2022 走看看