from typing import List
#--------暴力枚举---------
#时间复杂度 O(N^2)
#空间复杂度 O(1)
# class Solution():
# def __init__(self, nums: List[int], target: int) -> List[int]: # 关于为什要用__init__,可参考https://blog.youkuaiyun.com/geerniya/article/details/77487941
# self.nums = nums
# self.target = target
# def get_pos(self): # 注意缩进和上面的def一样
# for i in self.nums:
# for j in self.nums[self.nums.index(i)+1:]: # range(a,b),如果a>b不会报错也不会执行,不需要考虑溢出
# if i+j==self.target:
# return [self.nums.index(i),self.nums.index(j)]
# solution1 = Solution([2,14,15,7],9)
# print(solution1.get_pos())
#--------哈希表---------
#时间复杂度 O(N)
#空间复杂度 O(N)
class Solution():
def __init__(self, nums: List[int], target: int) -> List[int]: # 关于为什要用__init__,可参考https://blog.youkuaiyun.com/geerniya/article/details/77487941
self.nums = nums
self.target = target
#----try1:不能用value寻找index的方法,遇到List里a+b=target且a=b的情况,会返回错误结果;如[3,3],6时会输出[0,0]而不是[0,1]
# def get_pos(self):
# dic = {}
# for i in self.nums:
# diff = self.target - i
# if diff in dic.keys(): #注意括号
# print(self.nums.index(i))
# return [dic[diff],self.nums.index(i)]
# dic[i] = self.nums.index(i)
#----try best: 执行用时:60 ms,内存消耗 :15.1 MB
def get_pos(self):
dic = {}
for i in range(len(self.nums)):
diff = self.target - self.nums[i]
# print(i,diff,dic)
if diff in dic.keys(): #注意括号
return [dic[diff],i]
dic[self.nums[i]] = i #注意先判断后写,避免List里a+b=target且a=b的情况,会返回错误结果;如[3,3],6时会输出[0,0]而不是[0,1]
solution0 = Solution([2,14,15,7],9)
print(solution0.get_pos())
solution1 = Solution([3,3],6)
print(solution1.get_pos())