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]
  • 相关阅读:
    计算1的个数
    【环境配置】配置git
    Spoj 9887 Binomial coefficients 构造
    程序猿与HR博弈之:有城府的表达你的兴趣爱好
    C和指针 (pointers on C)——第六章:指针(上)
    关于undo表空间配置错误的ORA-30012
    每天进步一点点——Linux系统中的异常堆栈跟踪简单实现
    javaScript 对象的使用
    手机游戏加密那点事儿_2d资源加密_1
    支持向量机
  • 原文地址:https://www.cnblogs.com/ChevisZhang/p/12242640.html
Copyright © 2011-2022 走看看