[LeetCode]16. 3Sum Closest

16. 3Sum Closest

思路:先进行排序(不然后面的两个指针不知道怎么移动),选中一个,再利用Two Pointers选择剩下的两个数,如下:

class Solution(object):
    def threeSumClosest(self, nums, target):
        """
        :type nums: List[int]
        :type target: int
        :rtype: int
        """
        if len(nums) < 3:
            return sum(nums)
        nums.sort()
        result = sum(nums[:3])
        for i in xrange(0, len(nums)):
            left, right = i + 1, len(nums) - 1
            while left < right:
                s = nums[i] + nums[left] + nums[right]
                if s == target:
                    return s
                if abs(s - target) < abs(result - target):
                    result = s
                if s < target:
                    left += 1
                else:
                    right -= 1
        return result
posted @ 2017-08-19 01:45  banananana  阅读(115)  评论(0)    收藏  举报