两数之和
题目:https://leetcode-cn.com/problems/two-sum/
给定一个整数数组 nums
和一个目标值 target
,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。
你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。
示例:
给定 nums = [2, 7, 11, 15], target = 9 因为 nums[0] + nums[1] = 2 + 7 = 9 所以返回 [0, 1]
法一:
def twoSum(nums, target): """ :type nums: List[int] :type target: int :rtype: List[int] """ for i in range(len(nums)): t = i # print(t) k = nums[i] while i != (len(nums)-1): i = i + 1 # print(k + nums[i]) if (k+nums[i]) == target: r = i m = [t,r] break else: continue return m
有一个不能通过,因为运行时间长。应该使用字典查询
法二:
def twoSum(nums, target): hashmap = {} for i, x in enumerate(nums): y = target - x print('y is:', y) print(hashmap) if y in hashmap: return hashmap[y], i hashmap[x] = i
思路:先将list转化为dict,再由target求出y,遍历查询hashmap中是否存在y,hashmap是已经查询过的x构成的dict,这样方便在查询到y时,直接可以返回x,因为x是存在于hashmap中的。