码迷,mamicode.com
首页 > 编程语言 > 详细

三数和算法及其思考

时间:2020-04-08 22:38:00      阅读:87      评论:0      收藏:0      [点我收藏+]

标签:简单实现   时间比较   缺点   目的   turn   思考   剪枝   冗余   退出   

三数和算法

1、三重循环 去获取每次值相加,获取到相对应的值

缺点:虽然简单实现,但是复杂度为n3,时间比较复杂

2、循环加双指针 先排序 然后外层循环 内层用双指针的模式去遍历和比较

相对而言 减少了一层循环,且比较过程中可以部分剪枝

变种:三数和最接近target的算法

思考:我们拿到一个题目的时候,遇到不熟悉的内容的时候经常会首先想到蛮干,然后写出来的内容就显得相对比较冗余和复杂。实际上我们应该首先把题干和结论用相对比较简洁的语言重新表述,比如符号,然后推理要实现的步骤,写一些简单伪代码,然后从中看是否有我们能够联想或者思考到的剪枝或者偷懒方法,即优化的思路。

附实现的python代码:

 

def three_num2(nums):
‘‘‘
三数之和为0
:param nums:
:return:
先排序
然后首尾同号则肯定大于0
处理相同的数字
左边正数也肯定大于0
‘‘‘
nums.sort()
n_len = len(nums)
lst = []
i = 0
while i < n_len:
if nums[i] > 0: break # 左边正数 则退出
first = i + 1
last = n_len - 1
while first < last:
if first >= last or nums[i] * nums[last] > 0: break
result = nums[i] + nums[first] + nums[last]
if result == 0:
lst.append([nums[i], nums[first], nums[last]])
if result <= 0:
while first < last and nums[first] == nums[first + 1]:
first += 1
first += 1
else:
while first < last and nums[last] == nums[last - 1]:
last -= 1
last -= 1
while nums[i] == nums[i+1]: i +=1
i += 1
print(i)
return lst

 

三数和算法及其思考

标签:简单实现   时间比较   缺点   目的   turn   思考   剪枝   冗余   退出   

原文地址:https://www.cnblogs.com/shuliyuanshi/p/12663009.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!