0001.twoSum

from typing import List


#--------暴力枚举---------
#时间复杂度 O(N^2)
#空间复杂度 O(1)
# class Solution():
#     def __init__(self, nums: List[int], target: int) -> List[int]: # 关于为什要用__init__,可参考https://blog.csdn.net/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.csdn.net/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())

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值