leetcode1之两数之和

题目描述:

给定一个整数数组 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()用法。

原文地址:https://www.cnblogs.com/rounie/p/13156091.html