leetcode-- 问题1--twosum---方法理解(python3)
自己写不出好代码之前,先去理解别人的代码。
题目要求:
'''
给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。
你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。
示例:
给定 nums = [2, 7, 11, 15], target = 9
因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]
'''
第一个用字典实现
# 这里不用类,函数去写,省代码,方便直接拿去运行 nums = [3, 3] target = 6 # 不能重复利用这个数组中同样的元素---想到了键值对 # 键是唯一的,所以把原数组的元素作为字典的键,要输出数组的索引,因而索引作为字典的内容 """ enumerate is useful for obtaining an indexed list: | (0, seq[0]), (1, seq[1]), (2, seq[2]), ... """ a = {} for index, value in enumerate(nums): if target - value in a: # 对字典查找,查的是唯一的键 print(a[target - value], index) # nums[index]的内容加target - value这个键值等于target,一箭双雕,得到了对应两个索引。 # 索引的顺序是因为第一次字典为空,等第二次进行判断时,index已经加1,所以index要大,放后面 a[value] = index # 别忘了开始字典是空,要把索引存进去,value成了对应的键
第二个仅用列表
for index1, num in enumerate(nums): num2 = target - num if ((num2 in nums) and (index1 != nums.index(num2))): return [index1, nums.index(num2)]
浙公网安备 33010602011771号