leetcode.array--16. 3Sum Closest

问题: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是世界上最好的语言???

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值