leetcode.array--16. 3Sum Closest

来源:互联网 发布:计算机的发展史知乎 编辑:程序博客网 时间:2024/05/17 07:15

问题:16. 3Sum Closest

问题描述:https://leetcode.com/problems/3sum-closest/description/

题目大致意思是说:给出一个序列,找出其中三个数,使得这三个数的和最接近给定的目标值target,输出这三个数的和。

解题思路呢也比较明了,首先对序列排序,然后定下一个值nums[i],由于序列有序,后续的计算可以从两端向中间逼近,即令left=i+1,right=len(nums)-1,当left<right时,计算nums[i]+nums[left]+nums[right]的和sumn,找一个最接近target的sumn值。当sumn值大于target时,做right-=1,当sumn值小于target时,做left+=1,若sumn==target则直接返回。因此时间复杂度是O(n*n),空间复杂度 O(1)。

Python:

class Solution(object):    def threeSumClosest(self, nums, target):        """        :type nums: List[int]        :type target: int        :rtype: int        """        nums.sort()        res=nums[0]+nums[1]+nums[2]        minn = abs(res-target)        length = len(nums)        if length==3:            return res        for i in range(length):            left,right=i+1,length-1            while left<right:                sumn=nums[i]+nums[left]+nums[right]                if sumn==target:                    return sumn                if abs(sumn-target)<minn:                    res=sumn                    minn=abs(sumn-target)                if sumn>target:                    right-=1                if sumn<target:                    left+=1        return res

下面贴一个好玩的东西:


这是上面代码的运行时间,不知道O(n^2)为什么会在这个位置,当然这个时间的随机性很大,但可能跟语言也有很大关系。

于是想到一个梗,PHP是世界上最好的语言???

原创粉丝点击