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]
  • 相关阅读:
    shell管道和重定向
    shell脚本
    Hexo学习笔记--常用命令及部署步骤
    Git学习笔记--Git常用命令
    Spark link集合
    Struts2学习笔记--Struts2的体系结构
    JNI错误记录--JNI程序调用本地库时JVM崩溃
    Hibernate学习笔记--使用ThreadLocal
    Hibernate学习笔记--核心编程
    Hibernate学习笔记--映射配置文件详解
  • 原文地址:https://www.cnblogs.com/ChevisZhang/p/12242640.html
Copyright © 2011-2022 走看看