要求:给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。你可以按任意顺序返回答案。
方法一:暴力枚举
这个方法就不细说了,使用两个for循环就能搞定,直接看下代码就ok:
class Solution:
def twoSum(self, nums: List[int], target: int) -> List[int]:
n = len(nums)
for i in range(n):
for j in range(i + 1, n):
if nums[i] + nums[j] == target:
return [i, j]
return []
时间复杂度:O(N²)
空间复杂度:O(1)
方法二:使用哈希表
思路:首先创建一个哈希表,遍历数值,若哈希表中无此数,则添加之哈希表;若有,则说明次数和哈希表的数相加则为目标值,得解。
class Solution:
def twoSum(self, nums: List[int], target: int) -> List[int]:
hashtable = dict()
for i, num in enumerate(nums):
if target - num in hashtable:
return [hashtable[target - num], i]
hashtable[nums[i]] = i
return []
时间复杂度:O(N)
空间复杂度:O(N)
注:enumerate()函数,上述的i为键,num为值。类似于java中的map函数。