LeetCode-16. 3Sum Closest(最接近的三数之和)

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

Example:

Given array nums = [-1, 2, 1, -4], and target = 1.

The sum that is closest to the target is 2. (-1 + 2 + 1 = 2).

方法一:有序数列首尾逼近查找

其实这题跟上一题是姊妹题。上一题是找3数之和与target相同,这题是找相近。所用的方法基本一致,不过上一题是返回满足要求的元组,会出现重复结果,这题是返回和,只存在唯一答案,所以不必考虑重复情况,所以还简单了一点。

#Python
class Solution(object):
    def threeSumClosest(self, nums, target):
        """
        :type nums: List[int]
        :type target: int
        :rtype: int
        """
        nums.sort()    #先对数组进行排序
        result = nums[0] + nums[1] + nums[2]    #初始化结果必须是数组中的值
        for i in range(len(nums)-2):    #先确定第一个数
            h = i+1;e = len(nums)-1    #设定首尾数字,逐渐向结果逼近
            while h < e:
                sume = nums[i] + nums[h] + nums[e]
                if sume == target:
                    return sume
                
                if abs(result-target) > abs(sume-target):    #找最接近target的和
                    result = sume
                    
                if sume > target:    #当前结果比target大,则右端数字左移减小
                    e -= 1
                elif sume < target:    #当前结果比target小,则左端数字右移增大
                    h += 1
        return result

 

你可能感兴趣的:(算法)