代码实现

注意到由于返回的是索引,所以进行排序处理不是一个好办法。

解法一:暴力求解

  1. class Solution:
  2. def twoSum(self, nums: List[int], target: int) -> List[int]:
  3. length=len(nums);
  4. for i in range(length):
  5. for j in range(i+1,length):
  6. if nums[i]+nums[j]==target:
  7. return [i,j]

有很多重复的比较过程。
虽然实现很简单,但是在空间和时间的占用上都不容乐观。

解法二:使用字典

  1. class Solution:
  2. def twoSum(self, nums: List[int], target: int) -> List[int]:
  3. length=len(nums)
  4. dic={}
  5. for i in range(length):
  6. number=target-nums[i]
  7. if number in dic:
  8. return [i,dic[number]]
  9. else:
  10. dic[nums[i]]=i

我的错误:开始的时候先遍历list,建立一个完整的字典,然后再遍历一遍,判断number是否在字典中,这种方法是错误的,因为会重复的使用元素,比如target=6,list中有一个元素为3,导致结果出错。

思考

解法二相比解法一使用字典,占用的空间增加,时间减少。


list.sort()

没有返回值,就地修改list

Python3 List sort()方法

参考链接

1.两数之和-Python-LeetCode