16. 3Sum Closest

2017-08-05  本文已影响0人  l_b_n

题目大概

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

class Solution(object):
    def threeSumClosest(self, nums, target):
        """
        :type nums: List[int]
        :type target: int
        :rtype: int
        """
        i = 0
        size = len(nums)
        if size < 3:
            return 0
        ans = nums[0] + nums[1] + nums[size - 1]
        nums.sort()
        while i < size - 2:
            j = i + 1
            k = size - 1
            temp = target - nums[i]
            while j < k:
                if nums[j] + nums[k] == temp:
                    return target
                if nums[j] + nums[k] > temp:
                    if nums[j] + nums[j + 1] >= temp:
                        if nums[j] + nums[j + 1] -temp < abs(ans - target):
                            ans = nums[i] + nums[j] + nums[j + 1]
                            break
                    tempans = nums[i] + nums[j] + nums[k]
                    if (tempans - target) < abs(ans - target):
                        ans = nums[i] +nums[j] +nums[k]
                    k -= 1
                if nums[j] + nums[k] < temp:
                    if nums[k] + nums[k - 1] <= temp:
                        if abs(nums[k] + nums[k - 1] - temp) < abs(ans - target):
                            ans = nums[i] + nums[k - 1] + nums[k]
                            break
                    tempans = nums[i] + nums[j] +nums[k]
                    if abs(tempans - target) < abs(ans - target):
                        ans = nums[i] + nums[j] + nums[k]
                    j += 1
            i += 1
            if ans == target:
                return target
        return ans
上一篇 下一篇

猜你喜欢

热点阅读