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