leetcode_0016 最接近的三数之和

143 阅读1分钟

要求:

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

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

详解代码

 class Solution(object):
     def threeSumClosest(self, nums, target):
         """
         :type nums: List[int]
         :type target: int
         :rtype: int
         """
 
         nums.sort()
         result, min_diff = 0, float('inf')
 
         for index in range(len(nums) - 1):
             left = index + 1
             right = len(nums) - 1
 
             while left < right:
                 currSum = nums[index] + nums[left] + nums[right]
                 diff = abs(target - currSum)
 
                 if diff == 0:
                     return target
                 if diff < min_diff:
                     min_diff = diff
                     result = currSum
 
                 if currSum < target:
                     left += 1
                 else:
                     right -= 1
         return result

image.png

整体的思路:我们先将nums列表进行排序,然后循环遍历整个数据,分别从左和右取出来一个数据,有点二分查找的思想,但是使用result进行历史和target的数值的差值的保存。