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

    16. 最接近的三数之和

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

    示例:

    输入:nums = [-1,2,1,-4], target = 1
    输出:2
    解释:与 target 最接近的和是 2 (-1 + 2 + 1 = 2) 。

    分析:

    ​ 如果使用暴力法,求取每一种三个数的组合。需要三重循环,时间复杂度达到了(O(n^3))

    ​ 仔细观察这道题目,如果对nums进行排序。就可以利用 双指针法来优化时间复杂度。

    if cur_sum == target:
        return cur_sum
    if cur_sum < target:
        left += 1
    if cur_sum > target:
        right -= 1
    

    ​ 如果我们确定了原数组的排序,我们就可以明确下一步指针移动的方向。

    代码(Python):

    class Solution:
        def threeSumClosest(self, nums: List[int], target: int) -> int:
            res = float("inf")
            ans = 0
            nums.sort()
            n = len(nums)
            for i in range(n - 2):
                left, right = i + 1, n - 1
                while left < right:
                    cur_sum = nums[i] + nums[left] + nums[right]
                    cur_res = abs(cur_sum - target)
                    # 更新答案
                    if cur_res < res:
                        res = cur_res
                        ans = cur_sum
    		# 指针的移动放在一次循环的末尾更合适一些
                    if cur_sum == target:
                        return cur_sum
                    elif cur_sum < target:
                        left += 1
                    else:
                        right -= 1
            return ans
    
  • 相关阅读:
    寄存器基础知识
    基础知识
    架构
    Mac下Apache服务器的初步搭建
    ios字体简单设定
    xcode中自定义log打印
    jQuery打印插件
    ionic3生命周期钩子
    ES5 数组方法map
    $compile的妙用
  • 原文地址:https://www.cnblogs.com/enmac/p/13186146.html
Copyright © 2011-2022 走看看