算法基本一

时间复杂度分析

O(1)

O(logn)

O(n)

O(nlogn)

O(n^2)

O(2^n)

O(n!)

最好,最坏,平均时间复杂度

均摊时间复杂度和摊还分析

典型例子:动态扩容,list中有空间,直接插入;没有空间,先扩张list的大小,复制原来数据,再插入数据

空间复杂度:

首先是,递归的写法;然后是循环的写法(重点)

2^k > n

log2 (2^k) > log2 (n)

k > log2 (n)

统一为logn

战略上藐视它,战术上重视它

差的是搜索,是视野,是思路,因为你不知道

举例读懂题意

链表中,next指针实际上为一个内存单元,需要占用一个地址块

链尾插入优化,使用tail指针优化

链尾插入优化,引入虚拟头结点

删除给定结点

删除给定结点,引入虚拟头结点

双向链表删除结点

链表尾部插入的两个优化

1.使用tail指针

2.添加虚拟头结点

链表插入

1.在表头插入

2.在表尾插入

3.在中间插入

删除给定结点之后的结点

删除给定结点

链表解题技巧

1.遍历的核心逻辑(递归体)

2.遍历的结束条件(base case)

3.指针的初始值

头结点,尾结点,空链表

栈的两种表示方式

1.数组

2.链表

运算基本表达式

1.数字:入数字栈

2.运算符:

a.栈空,入运算符栈

b.栈不为空:

①新运算符优先级 > 栈顶元素优先级:入栈

②新运算符优先级 <= 栈顶元素优先级:出栈并计算

单调栈

函数调用栈

栈帧:

1.参数

2.局部变量

3.返回地址(我执行完之后,要返回到哪里去)(分层的思想,具体怎么实现不用管,结果就是返回到上一个函数的第几行代码)

main调用f,则f的返回地址为main的第几行代码

栈可以基于数组实现,也可以基于链表实现

其中vector是基于数组实现的,stack继承了vector

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值