09 两数之和-20200321
题目
给定一个整数数组 nums
和一个目标值 target
,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。
你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。
示例
给定 nums = [2, 7, 11, 15], target = 9
因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]
注意事项
- 注意数组长度,可以返回空数组。
- 有可能是负数存在。
思路一
第一个出现在脑海中的就是双层循环,但是复杂度肯定就是高了。于是想出来采用字典的形式,一次循环。
- 将指针指到的数字与目标做差,将差值作为key,index作为value存下来。
- 指针加一,如果能够在字典中找到相应的key就返回相应的value和当前的index。如果没有找到就重复第一步。
修改经历:
1. 提交成功。是不是Python 3的运行内存都是大于14MB的啊?(第一次提交)
- 执行用时 :40 ms, 在所有 Python3 提交中击败了92.75%的用户
- 内存消耗 :15 MB, 在所有 Python3 提交中击败了5.03%的用户
心得体会:
这个方法挺好,就暂时不考虑其他算法了。
最终代码展示:
class Solution:
def twoSum(self, nums: List[int], target: int) -> List[int]:
sum_index = []
dict = {}
for i in range(0, len(nums)):
if nums[i] in dict:
sum_index += [dict[nums[i]], i]
break
else:
dict[target-nums[i]] = i
return sum_index