题目:
给定一个整数数组 nums
和一个目标值 target
,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。
你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。
示例:
给定 nums = [2, 7, 11, 15], target = 9
因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]
一开始没什么想法,就只想到了一个个比较,也就是暴力解法。
class Solution(object):
def twoSum(self, nums, target):
"""
:type nums: List[int]
:type target: int
:rtype: List[int]
"""
for i in range(len(nums)):
for j in range(i+1, len(nums)):
if nums[i] + nums[j] == target:
return [i, j]
复杂度分析:
时间复杂度:,总循环次数是n平方级别。
空间复杂度:。
查看答案后,可以用哈希表来优化算法。使用字典将数组索引与值对应起来,查找字典是哈希查找,速度较快。
class Solution(object):
def twoSum(self, nums, target):
"""
:type nums: List[int]
:type target: int
:rtype: List[int]
"""
dic = {}
for i, v in enumerate(nums):
if target-v in dic:
return [dic[target-v], i]
dic[v] = i
复杂度分析:
时间复杂度:,将nums转化为enumerate类型,相当于将nums的索引和值存入字典,这个操作需要n次,之后遍历enumerate,并在字典中查找是否有相应的值,由于python字典是哈希实现,查找操作复杂度,则该步操作的复杂度是n级别,则总复杂度为。
空间复杂度:。所需的额外空间取决于哈希表中存储的元素数量,该表中存储了 n个元素。