leetcode-16. 最接近的三数之和

一、问题描述

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

例如,给定数组 nums = [-1,2,1,-4], 和 target = 1.

与 target 最接近的三个数的和为 2. (-1 + 2 + 1 = 2).

二、代码和思路

1.首先定义一个closest_sum来表示最接近flag的值,以及distance来表示与flag差值的绝对值(初值设为无穷大) 

2.这里设置一个标志flag来减少代码的余弦冗余,当num[i]大于targe而且flag为1则表示closest_sum已经被更新过

3.遍历排序后的nums,分别从当前位置,当前位置的下一位置为left,最后位置n-1为right来遍历,cur_sum>taget则right左移,否则left右移

这题的思路与leetcode- 15.三数之和相似

class Solution:
    def threeSumClosest(self, nums, target):
        """
        :type nums: List[int]
        :type target: int
        :rtype: int
        """
        nums.sort()
        n=len(nums)
        flag=0
        closest_sum=0
        distance=float("inf")
        for i in range(n-2):
            if nums[i]>target and flag:
                break
            if i !=0 and nums[i]==nums[i-1]:continue
            left=i+1;right=n-1
            while left<right:
                cur_sum=nums[i]+nums[left]+nums[right]
                cur_distance=abs(cur_sum-target)
                if cur_distance<distance:
                    closest_sum=cur_sum
                    distance=cur_distance
                    flag = 1
                if cur_sum==target:
                    break
                if cur_sum<target:
                    left += 1
                if cur_sum>target:
                    right -= 1
        return closest_sum
                
            
                
        

猜你喜欢

转载自blog.csdn.net/GrinAndBearIt/article/details/82290315