【发布时间】:2021-10-19 22:06:05
【问题描述】:
这是leetcode 3sum问题的解决方案:https://leetcode.com/problems/3sum/
我想我有一个解决方案,可能会很慢,但仍然是一个解决方案。但我似乎无法弄清楚为什么我不断收到额外的清单。基本上为input:nums = [-1,0,1,2,-1,-4]
我应该从我的代码中返回输出:[[-1,-1,2],[-1,0,1]].
但我得到的是:[[-1, 2, 1], [-1, 1, 0], [-1, 1, 0]]。
我尝试使用它来删除重复的列表,但我认为有一些逻辑错误导致了这个额外的列表。这是删除列表中重复列表的代码,没有提供任何有用的输出,只是内存位置。
代码:
dup_set = set(map(tuple,a))
non_dup_set = map(list,dup_set)
我还想我可能需要一个 hashmap,以便该方法知道不重用索引,但我对 hashmap 的理解不是很好,我只是认为键值,但除此之外没有。
这是完整的代码:
class Solution:
def threeSum(self, nums):
nums.sort()
l = 0
r = len(nums) - 1
final_list = []
while l < r:
if nums[l] + nums[r] <= 0:
print(nums[l+1:r])
if (nums[l] + nums[r]) in nums[l+1:r]:
final_list.append([nums[l],nums[r],(nums[l]+nums[r])])
l+=1
elif nums[l] + nums[r] >= 0:
print(nums[l+1:r])
if -(nums[l] + nums[r]) in nums[l+1:r]:
final_list.append([nums[l],nums[r],(nums[l]+nums[r])])
r-=1
print(final_list)
Solution().threeSum([-1,0,1,2,-1,-4])
输出:[[-1, 2, 1], [-1, 1, 0], [-1, 1, 0]]
所需:[[-1, 2, 1], [-1, 1, 0]]
请帮忙 谢谢
【问题讨论】:
-
你的逻辑有缺陷。无论
nums[l] + nums[r]的符号如何,您都需要该值的负数出现在列表中,而不是正数。您不需要那里的第一个if子句。然而,这并不能消除重复。 -
请注意,例如,[-1,2,1] 是不正确的:和是 2,而不是 0。
标签: python loops if-statement