LeetCode 1 两数之和

大四保研规划

由于保研之后,确实闲来无事,又深觉卷了三年绩点之后,技术基本上没有怎么长进,所以打算通过刷力扣来提升自己的编程的能力。考虑到未来科研以及可能从事的方向,我计划用python来进行编程(非科班,基本上零基础进行编程)。

两数之和

基础算法

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 []

类中定义函数,传入参数是 List列表,通过len()函数来获取列表长度,
range(5)等价于range(0, 5),是[0, 1, 2, 3, 4]没有5。(左闭右开)
range函数还可以引入步长来进行索引。

时间复杂度

大O符号表示法中,时间复杂度的公式是: T(n) = O( f(n) ),其中f(n) 表示每行代码执行次数之和,而 O 表示正比例关系,这个公式的全称是:算法的渐进时间复杂度。
n无限大的时候,T(n) = time(1+2n)中的常量1就没有意义了,倍数2也意义不大。因此直接简化为T(n) = O(n) 就可以了。所以当一个循环有多行代码时,可以近似为1行代码,也就是执行次数指的是循环次数。
运算次数:(n-1)+…+(0)=(0+n-1)*n/2;
所以时间复杂度为O(n^2)

空间复杂度

如果算法执行所需要的临时空间不随着某个变量n的大小而变化,即此算法空间复杂度为一个常量,可表示为 O(1)。
空间复杂度:O(1)。

进阶算法 哈希表

class Solution:
    def twoSum(self, nums: List[int], target: int) -> List[int]:
        d = dict()#构建字典
        for i, num in enumerate(nums):           #返回 enumerate(枚举) 对象,下标i(0开始计数),数
            if target - num in d:                          #如果target - num在字典中(前面枚举的数中)
                return [d[target - num], i]				#则返回
            d[nums[i]] = i                                   #添加键值对  num[i](key)=i(value)
        return []

时间复杂度

时间复杂度:O(N),其中 N是数组中的元素数量。对于每一个元素 x,可以 O(1)地寻找 target−x。

空间复杂度

空间复杂度:O(N),其中 N 是数组中的元素数量。主要为哈希表的开销。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ShuaS2020

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值