问题
解答
切片
遍历nums[:i]
(由于python中列表切片是“左闭右开”所以避免了重复利用数组中相同的元素)寻找是否有与target - nums[i]
相等的元素,序号记为j,返回[j,i]
即解。
时间复杂度: O(N^2)
def twoSum(nums, target):
lens = len(nums)
j=-1
for i in range(lens):
if (target - nums[i]) in nums[:i]:
j = nums[:i].index(target - nums[i])
break
if j>=0:
return [j,i]
print(twoSum([2,5,5,11],10))
调试结果:
10=5+5,结果正确
字典
2020.03.31重做
时间复杂度: O(N)
class Solution:
def twoSum(self, nums: List[int], target: int) -> List[int]:
d = {}
for i in range(len(nums)):
temp = target - nums[i]
if temp in d:
return [d[temp], i]
d[nums[i]] = i
调试结果: