LeetCode使用Python实现两数之和

需求:

给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的 两个 整数。

示例:

给定 nums = [2, 7, 11, 15], target = 9
  
因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]  

要求:

你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。

废话少说,直接上代码:
class Solution:
	def twoSum(self, nums, target):
		"""
		:type nums: List[int]
		:type target: int
		:rtype: List[int]
		"""
		dic = dict()  
		for i, num in enumerate(nums):  
			if target - num in dic:
				return [dic.get(target - num), i]
			dic[num] = i
总结:

很短小很精悍是吧!
来来来~咱们分析一下:
首先创建空字典的目的是将给定数组中的元素在字典中以key-value的形式存储,当然了,key是元素,value是元素在数组中的下标。
然后enumerate()这个函数能将数组中的元素以(下标, 元素)的样式枚举出来,然后我们使用for循环遍历拆包,每次遍历我们都能获得数组中的元素以及它的下标。
最后我们每次循环判断目标值与遍历出来的元素之差(target - num)是否在我们创建的字典dic中,这一步判断的时间复杂度为O(1),因为在字典中查找元素时,字典先将元素hash,通过hash后的值(也称为索引)去查找匹配的索引。如果不存在,那么就将当次遍历的元素及其下标以key-value的形式存入dic;如果存在,那么很显然,此时的num和dic中存在的(target - num)就是天生一对,最后只需要返回它们的下标即可!

猜你喜欢

转载自blog.csdn.net/june_young_fan/article/details/84664552
今日推荐