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)]    

 





posted on 2019-03-19 15:07  fly&飞  阅读(122)  评论(0)    收藏  举报