题解一:暴力穷举法
class Solution:
def twoSum(self, nums: List[int], target: int) -> List[int]:
for i in range(len(nums)-1):
for j in range(1, len(nums)):
if nums[i] + nums[j] == target and i != j:
return [i, j]
暴力穷举,时间复杂度在O(),空间复杂度在O(1),提交结果如下:
题解二:
class Solution:
def twoSum(self, nums: List[int], target: int) -> List[int]:
dic = {}
# 创建字典,建立列表元素值nums[i]和索引i的映射关系(便于后期直接通过元素值找到其索引值)
for i in range(len(nums)):
dic[nums[i]] = i
for i in range(len(nums)):
# 需要找的目标元素值
j = target - nums[i]
# 如果字典中能够找到目标元素,
# 并且目标元素j的位置dic[j]和原来的元素nums[i]的位置不相等,返回元素索引值;
# 避免如[2,3,3],找两数之和为6时,打印的元素位置都是1
if j in dic and i != dic[j]:
return [i, dic[j]]
这种方式可以将时间复杂度降到O(n),但是空间复杂度升到O(n),不过综合效率比暴力穷举法还是更高一点,提交结果如下: