Я решаю проблему leetcode 3sum , используя мой предыдущий код для 2sum.
Это довольно просто, поскольку он перебирает каждый элемент в данном списке, а затем вызывает 2sum, используя текущее значение в качестве -target.class
Solution(object):
def threeSum(self, nums):
output= []
for i in range(len(nums)):
temp = self.twosum(nums[:i] + nums[i+1:],-nums[i])
if temp != -1:
k = sorted(temp + [nums[i]])
output.append(k)
return output
def twosum(self,nums,target):
fhash = {}
for i in range(len(nums)):
if nums[i] in fhash:
return [nums[fhash[nums[i]]],nums[i]]
else:
fhash[target - nums[i]] = i
return -1
Код работает для 123 из 313 тестовых случаев. Это терпит неудачу на этом [-4,-2,-2,-2,0,1,2,2,2,3,3,4,4,6,6]
.
Ожидаемый результат - [[-4,-2,6],[-4,0,4],[-4,1,3],[-4,2,2],[-2,-2,4],[-2,0,2]]
. Пока моя выдает: [[-4,2,2],[-2,0,2],[-4,1,3],[-2,-2,4],[-4,-2,6]]
.
Так что он не может распознать [-4,0,4]
.
Что я мог делать не так? Я пока особо не беспокоился об оптимизации, так же как и о получении реального ответа.