這是leetcode 3sum問題的解決方案:https ://leetcode.com/problems/3sum/
我想我有一個解決方案,可能很慢,但仍然是一個解決方案。但我似乎無法弄清楚為什么我總是得到一個額外的串列。基本上對于輸入: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)
還想我可能需要一個哈希圖,以便該方法知道不要重用索引,但我對哈希圖的理解并不是那么好,我只是認為鍵值,但除此之外別無他法。
這是完整的代碼:
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]]
請幫忙謝謝
uj5u.com熱心網友回復:
我想你可以這樣:
non_dup_set = list(set(map(tuple, a)))
uj5u.com熱心網友回復:
考慮這個答案。它得到正確的元組,盡管順序不同。不知道為什么這很重要。
class Solution:
def threeSum(self, nums):
final_list = []
for l, v1 in enumerate(nums):
for r, v2 in enumerate(nums[l 1:]):
if -(v1 v2) in nums[l r 1:]:
check = sorted((v1,v2,-(v1 v2)))
if check not in final_list:
final_list.append(check)
print(final_list)
Solution().threeSum([-1,0,1,2,-1,-4])
一個更好的答案用于itertools.combinations簡化事情:
import itertools
class Solution:
def threeSum(self, nums):
final_list = []
for subset in itertools.combinations(nums,3):
if sum(subset) == 0:
check = sorted(subset)
if check not in final_list:
final_list.append(check)
print(final_list)
Solution().threeSum([-1,0,1,2,-1,-4])
和強制性的單行:
import itertools
class Solution:
def threeSum(self, nums):
final_list = list(set(tuple(sorted(subset)) for subset in itertools.combinations(nums,3) if sum(subset) == 0))
print(final_list)
Solution().threeSum([-1,0,1,2,-1,-4])
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/325765.html
