给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。
两种方法,第一种时间超过范围了
#!usr/bin/env python
# -*- coding:utf-8 _*-
"""
@author: Caramel
@file: 1.py
@time: 2020/02/25
@desc:给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那两个整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。"""#双循环直接找
def twoSum_1(list1, target):i = 0for i in range(0, len(list1)):for j in range(i + 1, len(list1)):if list1[i] + list1[j] == target:return i, j#利用字典表
def twoSum_2(list2, target):dict = {}#新建字典表for i, item in enumerate(list2):#i对应key,item对应值j = target - item#定义item对应的缺少的另一半整数if dict.get(j):#如果想要找的整数在字典表中return i, dict.get(j)#返回两个数的索引dict[item] = i#最后再加入字典表可以防止两个数都是一样的问题#自定义字典表,不会覆盖key一样的值
if __name__ == '__main__':alist = [2, 5, 5, 9]print(twoSum_2(alist, 10))