Two Sum em LeetCode
Estou tentando fazer uma pergunta do LeetCode:
Dada uma matriz de números inteiros, encontre dois números para que eles se somam a um número de destino específico.
A função twoSum deve retornar índices dos dois números, de forma que eles sejam adicionados ao destino, onde o índice1 deve ser menor que o índice2. Observe que suas respostas retornadas (índice1 e índice2) não são baseadas em zero.
Você pode supor que cada entrada teria exatamente uma solução.
Entrada: números = {2, 7, 11, 15}, destino = 9 Saída: índice1 = 1, índice2 = 2
A primeira tentativa foi usar dois para loops, o que me deu O (n ^ 2) e, infelizmente, não passou. Por isso, tentei usar:
target - current = index
E procure se o índice existe em um dicionário.
Este é o meu código:
class Solution:
def twoSum(self, nums, target):
dic = {}
#A number can appear twice inside the same index, so I use a list
for i in xrange(0, len(nums)):
try:
dic[nums[i]].append(i)
except:
dic[nums[i]] = []
dic[nums[i]].append(i)
try:
for items_1 in dic[nums[i]]:
for items_2 in dic[target-nums[i]]:
if(items_1+1 != items_2+1):
l = []
if(items_2+1 > items_1+1):
l.append(items_1+1)
l.append(items_2+1)
else:
l.append(items_2+1)
l.append(items_1+1)
return l
except:
pass
Eu desenvolvi isso localmente e consegui o resultado correto com um dos casos de teste que o LeetCode estava reclamando: [-3,4,3,90], 0
A saída que obtive foi [1, 3], mas no LeetCode retornou nulo, alguém sabe por que isso aconteceria?