美文网首页
16. 三数之和最接近

16. 三数之和最接近

作者: sarto | 来源:发表于2022-03-17 16:52 被阅读0次

    题目

    给定一个整数数组 nums 和一个目标数 target,在 nums 中找出三个数,要求其和与 target 最接近。
    即 nums[i] + nums[j] + nums[k] + taget ~= 0

    解析

    1. 暴力找出所有三元结果,依次和 target 比较。

    2. 在暴力三次循环的基础上,作出提前终止条件。利用排序数组。
      (1)固定 i j k。
      (2)移动 k 当 和 大于 sum 的时候,可以终止,因为后续的和都比 sum 大。


      image.png
    image.png

    排序后效率明显高一些,但和其他人的提交比仍然很低,而且这里没有空间换取时间,也就是说存在空间换取时间的解法,空间用在哪里?

    伪码

    sort(nums)
    if target < 0
      i = 0,j=i+1,k=j+1
     diff = nums[i] + num[j] +num[k] -target
      if diff > 0 
          rst = sum-target < target-rst ? sum : rst
          return
      rst = sum
          i++ j++ k++
    if target > 0 
        i=len(s)-1 j=i-1 k= j-1
        diff = nums[i] + nums[j] + num[k] - target
         if diff < 0 
            rst = target - sum < rst - target ? sum : rst
            return
          rst = sum
         i-- j-- k--
    

    代码

    相关文章

      网友评论

          本文标题:16. 三数之和最接近

          本文链接:https://www.haomeiwen.com/subject/uecvdrtx.html