zoukankan      html  css  js  c++  java
  • 16.最接近三数之和(leetcode)

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

    开心,这题用15题的方法一遍过。

    相同点:

      1. 排除 len(nums) < 3 的情况

      2. 先排序

      3. 三指针,两个循环

      4. 同样的句子来List去重 while i<j and nums[i] == nums[i-1]: i+=1

     

    不同点:

      1. k 这层循环要走完 |   而不是走到nums[k] > 0就停止了

      2. 存储答案的是一个List,存储  [差值,答案]  |  而不是之前的List Of Lists

      3. 迭代的时候不是与0比较,而是与target比较

    收获:

      温习了双指针,与去重循环 while i<j and nums[i] == nums[i-1]: i+=1

    class Solution:
        def threeSumClosest(self, nums: List[int], target: int) -> int:
            if len(nums)<3:
                return None
            nums.sort()
            resAndGap = [0,float('inf')]
            k = 0
            while k < len(nums):
                i,j = k+1,len(nums) -1
                while i<j:
                    s = nums[k] + nums[i] + nums[j]
                    resAndGap = [s,abs(s-target)] if  abs(s-target) < resAndGap[1] else  resAndGap
                    if s == target:
                        return target
                    elif s < target:
                        i += 1
                        while i<j and nums[i] == nums[i-1] : i += 1
                    elif s > target:
                        j-= 1
                        while i < j and nums[j] == nums[j+1]: j-=1
                k += 1
                while k < len(nums) and nums[k] == nums[k-1]: k += 1 
            return resAndGap[0]
  • 相关阅读:
    原型和原型链
    全局对象与临时转换
    JavaScript的数据类型转换
    JavaScript 定时任务多事件冲突问题
    PHP 5.5.38 + mysql 5.0.11 + zabbix3.0 + nginx 安装
    mysql 查找多个值并且取最大值一个和分组
    mysql 关联左表不存在数据 并 根据身份证计算查找大于65岁以上老人
    JavaScript for 循环累加 json 字符串
    jQuery.1.9 live 代替事件 on 新增内容无法触发事件
    MySQL 字段基本操作
  • 原文地址:https://www.cnblogs.com/ChevisZhang/p/12242640.html
Copyright © 2011-2022 走看看