力扣《算法入门》知识点总结
这篇文章主要记录我在刷力扣习题中遇到的新知识点,以及做题当中涉及到自己不熟悉的旧知识点,做一个记录,主要用于自己以后的复习使用。
一、新知识点学习
1、算法部分
1)二分法
时间复杂度为:o(log n)
空间复杂度为:o(1)
2)直接排序
时间复杂度:o(n*log n)
,其中 n 是数组 nums的长度。
空间复杂度:o(log n)
,除了存储答案的数组以外,我们需要o(log n)
的栈空间进行排序。
3)双指针
时间复杂度:o(n)
,其中 n 为序列长度。每个位置至多被遍历两次。
空间复杂度:o(1)
,只需要常数的空间存放若干变量。
4)暴力枚举法
时间复杂度:o(n^2)
。
空间复杂度:o(1)
。
5)链表
这一种数据结构完全没有接触过,还需要系统的学习一下,这里先打个卡。
学习资料链接。
1、链表基本类型
链节点:ListNode
,包含链表在该节点的数据元素、该数据元素的后续元素所在链节点的地址(该地址被称为 后继指针next),即ListNode
类使用成员变量val
表示数据元素的值,使用指针变量next
表示后续元素的地址。
链表:LinkedList
,一种线性表数据结构,链表是由链节点通过next衔接而构成的。ListkedList
类中只有一个链节点变量 head
用来表示链表的头节点。
单链表、双向链表、循环链表
2、主要操作
1)建立一个新的线性链表。
2)求线性链表的长度。
3)查找元素。
4)插入元素:从链表头部插入元素、在链表尾部插入元素、在链表中间插入元素。
5)改变元素。
6)删除元素:在链表头部删除元素、在链表尾部删除元素、在链表中间删除元素。
具体代码详见链表python基础知识。
6)图的遍历
1)深度有限遍历(DFS):以“深度”为第一关键词,每次都沿路径到不能再前进时,才退回到最近的岔路口。
2)广度优先遍历(BFS):以“广度”为第一关键词,每次以扩散的方式向外访问。
时间复杂度:o(R*C)
,R为访问的整个网格的行数,C为列数。
空间复杂度:o(R*C)
,R为访问的整个网格的行数,C为列数。
2、八股文
1)OSI七层结构模型
从底层开始,依次为物理层、数据链路层、网络层、传输层、会话层、表示层、应用层。
2)HTTP的九种请求方法
1.http1.0定义了三种:
GET: 向服务器获取资源,比如常见的查询请求
POST: 向服务器提交数据而发送的请求
Head: 和get类似,返回的响应中没有具体的内容,用于获取报头
2.http1.1定义了六种
PUT:一般是用于更新请求,比如更新个人信息、商品信息全量更新
PATCH:PUT 方法的补充,更新指定资源的部分数据
DELETE:用于删除指定的资源
OPTIONS: 获取服务器支持的HTTP请求方法,服务器性能、跨域检查等
CONNECT: 方法的作用就是把服务器作为跳板,让服务器代替用户去访问其它网页,之后把 数据原原本本的返回给用户,网页开发基本不用这个方法,如果是http代理就会使用这个, 让服务器代理用户去访问其他网页,类似中介 TRACE:回显服务器收到的请求,主要用于测试或诊断
参考资料
3)HTTP常见状态码
1xx:代表请求已被接受,需要继续处理。
2xx:代表请求已成功被服务器处理完毕。
3xx:代表需要客户端采取进一步的操作才能完成请求
4xx:代表发送的请求有语法错误
5xx:代表服务器有异常
4)五种构建型模式
工厂方法模式:为每一类对象建立工厂,将对象交由工厂创建,客户端只和工厂打交道。
抽象工厂模式:为每一类工厂提取出抽象接口,使得新增工厂、替换工厂变得非常容易。
建造者模式:用于创建构造过程稳定的对象,不同的 Builder 可以定义不同的配置。
单例模式:全局使用同一个对象,分为饿汉式和懒汉式。懒汉式有双检锁和内部类两种实现方式。
原型模式:为一个类定义 clone 方法,使得创建相同的对象更方便
参考资料
5)结构型模式
适配器模式:用于有相关性但不兼容的接口
桥接模式:用于同等级的接口互相组合
组合模式:用于整体与部分的结构
装饰模式
外观模式
享元模式
代理模式
参考资料
二、旧知识点复习
1、列表、集合、字符串的一些知识点
1)、想将一个列表中的重复元素去掉:将列表变为集合后,重复元素将会去掉,但此时的元素顺序会发生改变。
2)查找一个列表中某一个元素的索引:列表.index(元素)
3)程序中如果使用了return,此时程序的话语权也就被夺走了,不会往下继续进行。
4)将一个列表中的元素按照句子排列起来:' '.join(列表)