我正在尝试解决一道LeetCode的问题:
给定一个整数数组,找到两个数字使它们加起来等于特定目标数字。
函数twoSum应该返回这两个数字的索引,以便它们加起来等于目标数字,其中index1必须小于index2。请注意,你返回的答案(index1和index2)不是基于0的。
你可以假设每个输入都只有一个解。
输入: numbers={2, 7, 11, 15}, target=9 输出: index1=1, index2=2
第一次尝试使用了两个for循环,导致时间复杂度为O(n^2),遗憾的是没有通过测试。因此我尝试使用:
target - current = index
搜索字典中是否存在该索引。
以下是我的代码:
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
我在本地开发时,使用了LeetCode所提供的一个测试用例:[-3,4,3,90], 0,能够得到正确的结果[1, 3],但在LeetCode上运行却返回了null。请问这是为什么?
try
部分中使用了nums[i]
,好像i
在那里仍然有意义... - Stefan Pochmann