[LeetCode] 16. 3Sum Closest_Medium tag: Array, Two pointers

Given an array nums of n integers and an integer target, find three integers in nums such that the sum is closest to target. Return the sum of the three integers. You may assume that each input would have exactly one solution.

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).

The subject with [LeetCode] 15. 3Sum_Medium tag: Array is very similar, but target, and then to the closest, they still use two pointers to get after each pair num, so that their sum closest to the target, and then take all sum closest sum.

class Solution:
    def 3sumClosest(self, nums, target):
        ans, dif, n = None, None, len(nums)
        nums.sort()
        for i in range(n - 2):
            total = nums[i] + self.helper(nums, i + 1, n - 1, target - nums[i])
            localDif = abs(total - target)
            if dif is None or localDif < dif:    
                dif, ans = localDif, total
        return ans

    def helper(self, nums, start, end, target):
        ans, dif = None, None
        while start < end:
            total = nums[start] + nums[end]
            if total == target:
                return total
            elif total < target:
                localDif = target - total
                start += 1
            elif total > target:
                localDif = total - target
                end -= 1
            if dif is None or localDif <dif: 
                dif, year = localDif, total
         return years

 

Guess you like

Origin www.cnblogs.com/Johnsonxiong/p/10978822.html