概述
最接近的三数之和
- 题目
- 个人解--超时
- 官方解
- 画解算法
- 改进解
题目
个人解–超时
依稀记得昨天自己有想法,然后今天用了算是贪心算法吧。思路清晰,代码一遍过。但是用例超时了。
class Solution:
def threeSumClosest(self, nums: List[int], target: int) -> int:
Sum,ans=abs(nums[0]+nums[1]+nums[2]-target),nums[0]+nums[1]+nums[2]
for i in range(len(nums)):
j=1
while i+j<len(nums):
k=1
while i+j+k<len(nums):
temp=abs(nums[i]+nums[i+j]+nums[i+j+k]-target)
if temp<Sum:
Sum=temp
ans=nums[i]+nums[i+j]+nums[i+j+k]
k+=1
j+=1
return ans
我的个人理解是,这题跟昨天的题一个模子刻出来的,只是上一题是找确切的值,本题可能找的是一个近似值。
官方解
学到了,先排序然后两头夹,这样就减少了很多枚举的次数。
画解算法
看了解析感觉我的总体思路是有的,但是细节处理还是不够,算法还能够优化,学海无涯、
改进解
class Solution:
def threeSumClosest(self, nums: List[int], target: int) -> int:
nums.sort()
Sum,ans=abs(nums[0]+nums[1]+nums[2]-target),nums[0]+nums[1]+nums[2]
for i in range(len(nums)):
if i > 0 and nums[i] == nums[i - 1]:
continue
j,k=i+1,len(nums)-1
while j<k:
temp=nums[i]+nums[j]+nums[k]
if temp==target:
return temp
elif temp>target:
if abs(temp - target)<Sum:
Sum=abs(temp - target)
ans=nums[i]+nums[j]+nums[k]
k-=1
else:
if abs(temp - target)<Sum:
Sum=abs(temp - target)
ans=nums[i]+nums[j]+nums[k]
j+=1
return ans
权限&免责&交流声明
最后
以上就是干净荔枝为你收集整理的LeetCode-16-最接近的三数之和题目个人解–超时官方解画解算法改进解的全部内容,希望文章能够帮你解决LeetCode-16-最接近的三数之和题目个人解–超时官方解画解算法改进解所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复