LeetCode 1.两数之和
题目描述:
给定一个整数数组和一个目标值,找出数组中和为目标值的两个数。
你可以假设每个输入只对应一种答案,且同样的元素不能被重复利用。
示例:
给定 nums = [2, 7, 11, 15], target = 9
因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]
解决方法:暴力求解、利用enumerate函数半暴力求解
暴力求解
1.具体方法:
嵌套循环,外部循环遍历数组元素,内部循环遍历当前元素之后的数组元素,判断和是否为target
2.代码:语言python
class Solution:
def twoSum(self, nums, target):
m=len(nums)
for i in range(m):
k=target-nums[i]
for j in range(i+1,m):
if nums[j]==k:
return [i,j]
显然这是大家都能想到的解法,效率也是十足的低下。在借鉴了高效率答案之后,将它化为己用,进行深入理解。
利用enumerate函数半暴力求解
1.具体方法:
enumerate函数:enumerate() 函数用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在 for 循环当中。
例:
seasons = [‘Spring’, ‘Summer’, ‘Fall’, ‘Winter’]
list(enumerate(seasons))
[(0, ‘Spring’), (1, ‘Summer’), (2, ‘Fall’), (3, ‘Winter’)]
遍历enumerate得到的数组(i,num)对,用字典dic存储未找到配对的(num:i)对,若dic中存在元素与当前元素配对,返回结果。巧妙在于将遍历过的值记住,因而只遍历一次。
2.代码:语言python
class Solution:
def twoSum(self, nums, target):
dic = {}
for i, num in enumerate(nums):
if (target - num) in dic:
return i,dic[target - num]
dic[num] = i