题目描述:
给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。
你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。
示例:
给定 nums = [2, 7, 11, 15], target = 9
因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/two-sum
代码:
1 def twosum(nums, target): 2 ''' 3 4 :param nums: 5 :param target: 6 :return: 7 ''' 8 result = [] 9 for i in range(len(nums)): 10 if target - nums[i] in result: 11 p = result.index(target - nums[i]) 12 return [p, i] 13 else: 14 result.append(nums[i]) 15 16 17 print("------------测试twoSum()----------") 18 nums = [3, 2, 4] 19 res = twosum(nums, 6) 20 print("res=", res) 21 22 23 def twoSum1(nums, target): 24 ''' 25 26 :param nums: 27 :param target: 28 :return: 29 ''' 30 dct = {} 31 for i, n in enumerate(nums): 32 if target - n in dct: 33 return [dct[target - n], i] 34 dct[n] = i 35 36 37 print("------------测试twoSum()----------") 38 nums = [3, 2, 4] 39 res = twoSum1(nums, 6) 40 print("res=", res)
输出:
------------测试twoSum()---------- res= [1, 2] ------------测试twoSum()---------- res= [1, 2]
总结:看题目好像很简单,其实这是一道比较经典的题目。简单朴实无华的题目往往会涉及到很多知识点,感觉自己要做出来了,但提交总是显示有错误。本博客采用两种方法来解答,但其实有异曲同工之妙。都是额外借助一个列表或者字典实现循环遍历过程中查重判断需要。掌握了新函数enumerate()用法。