Мой алгоритм Leetcode для задачи 3sum не может пройти через 311-й контрольный пример - превышен лимит времени (длина списка 3000)
Вложенный l oop кажется самой неэффективной частью моего алгоритма. Есть ли способ сделать его более эффективным, используя другой подход?
def threeSum(self, nums: List[int]) -> List[List[int]]:
result = []
for i, e in enumerate(nums):
for i2, e2 in enumerate(nums[i+1:]):
e3 = -1 * (e + e2)
l = [e,e2,e3]
l.sort()
if l in result:
continue
nums[i] = ''
nums[i2+i+1] = ''
if e3 in nums:
result.append(l)
nums[i] = e
nums[i2+i+1] = e2
return result
Я также пытался удалить l.sort (), но ограничение по-прежнему превышено:
nums.sort()
for i, e in enumerate(nums):
for i2, e2 in enumerate(nums[i+1:]):
e3 = -1 * (e + e2)
l = []
if e3 > e2:
l = [e,e2,e3]
elif e3 < e:
l = [e3,e,e2]
else:
l = [e,e3,e2]
if l in result:
continue
nums[i] = ''
nums[i2+i+1] = ''
if e3 in nums:
result.append(l)
nums[i] = e
nums[i2+i+1] = e2
return result