题目描述
给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a ,b ,c ,使得 a + b + c = 0 ?请找出所有和为 0 且 不重复 的三元组。
解题思考
整体思路:进行排序,而后固定位。再使用左右指针进行查询。
重要细节:外部定位去重,左右指针进行去重。如果定位值大于0,无遍历必要。
实践收获:关于python代码的一些编写。
代码实现
class Solution(object):
def threeSum(self, nums):
"""
:type nums: List[int]
:rtype: List[List[int]]
"""
re=[]
if len(nums)<3:
return re
nums.sort()
for i in range(0,len(nums)-2):
if nums[i]>0:break
if i>0 and nums[i]==nums[i-1]:
continue
left=i+1
right=len(nums)-1
while left<right:
if nums[i]+nums[left]+nums[right]==0:
re.append([nums[i],nums[left],nums[right]])
while left<right and nums[left]==nums[left+1]:
left+=1
while left<right and nums[right]==nums[right-1]:
right-=1
left+=1
right-=1
continue
elif nums[i]+nums[left]+nums[right]<0:
while left<right and nums[left]==nums[left+1]:
left+=1
left+=1
continue
else :
right-=1
continue
return re
性能评估
关于右指针去重的方法有问题,但是还没找出来。所以时间性能有所下降。
才发现自己之前写过这道题。但是当时没有对细节进行真正的思考与反思。导致再花时间。这和之前python实现超出时间限制的疑惑对应了起来。才发现自己当时并没有注意到这些细节。
所以:学而不思则罔,思而不学则殆。