1. 两数之和
(1)方法一
def twoSum(self, nums: List[int], target: int) -> List[int]:
result_list = []
for i in range(len(nums)):
for j in range(i+1,len(nums)):
if nums[i] + nums[j] == target:
result_list.append(i)
result_list.append(j)
break
return result_list
执行用时:7340 ms, 在所有 Python3 提交中击败了5.01%的用户
内存消耗:14.9 MB, 在所有 Python3 提交中击败了5.48%的用户
[思路]:两层循环遍历。
(2)方法二
def twoSum(self, nums: List[int], target: int) -> List[int]:
result_list = []
for i in range(len(nums)):
s_value = target - nums[i] # 要找的值
s_nums = nums[i+1:] # 在这里面找
if s_value in s_nums: # 使用 in 在List中查找
# 加i+1是因为s_nums的下标相对nums发生了变化
j = s_nums.index(temp) + i+1
result_list.append(i)
result_list.append(j)
break
return result_list
执行用时:880 ms, 在所有 Python3 提交中击败了41.51%的用户
内存消耗:14.7 MB, 在所有 Python3 提交中击败了12.80%的用户
[思路]:用python的关键字in来查找差值是否在列表内。
(3)方法三
def twoSum(self, nums: List[int], target: int) -> List[int]:
dic = {}
for index, num in enumerate(nums):
# 将List的内容转移到字典,K为值,V为下标
# 字典会将重复值合并,其V为最后一次出现的值的下标
dic[num] = index
for index, num in enumerate(nums):
s_num = target - num # 要找的值
if s_num in dic: # 用 in 在字典中查找
j = dic.get(s_num)
if j != index: # 确保找到的不是自己
return [index,j]
执行用时:60 ms, 在所有 Python3 提交中击败了76.81%的用户
内存消耗:15.4 MB, 在所有 Python3 提交中击败了5.48%的用户
[思路]:相较方法2,这里使用了字典替代列表。因为字典是用 Hash表 实现的,in 关键字的查找速度会比 List 快。