《Java架构师的第一性原理》52算法之爱学习的饲养员 手把手带你刷Leetcode力扣

B站:爱学习的饲养员

目标:简单题、中等题会刷,至少有思路

1. 算法的时间复杂度和空间复杂度

1.1 时间复杂度

1)什么是时间复杂度

算法的执行效率 = 算法的执行时间与算法的输入值之间的关系

2)大O表示法

3)常用时间复杂度案例分析

O(1)、O(logN)、O(N)、O(NlogN)、O(N2)

O(1):时间复杂度和输入值没有关系

O(logN):

O(N):1层循环

O(M + N):2个循环相加

O(NlogN):1个循环套1个O(logN)循环

O(N2):2个循环嵌套

4)常用时间复杂度对比

O(1) < O(logN) < O(N) < O(NlogN) < O(N2) < O(2n) < O(n!)

二分查找O(logN)

排序O(NlogN)

1.2 空间复杂度

1)什么是空间复杂度

算法的存储空间与输入值之间的关系。

2)大O表示法

O(1)、O(N)

O(1):常量

O(N):array、list、linked list、递归

O(N2):2个循环嵌套

3)常用空间复杂度案例分析

4)常用空间复杂度对比

时间和空间只能二选一。面试时,和面试官讲清楚。工作时,时间 > 空间。

2. 常用的数据结构

2.1 数组Array

1)定义

数组:在连续的内存空间中,存储一组相同类型的元素。

2)常用API

创建数组:

新增元素:尾插O(1)、中间插入O(N)

访问元素(用索引下标访问元素): O(1)

更新元素: O(1)

删除元素:remove元素O(N)、pop(下标)O(N)、pop()O(1)

获取数组长度:len(a)

遍历数组:for in;for in enumerate; for in range

查找某个元素:O(N)

数组排序:

2.2 链表 

1)定义

链表:

特点:写很快读很慢,适用读少写多的情形

2)考察项

访问Access:O(N)

搜索Search:O(N)

插入Insert:O(1)

删除Delete: O(1)

3)常用API

创建链表、添加元素、访问元素、查找元素、删除元素、链表的长度

链表练习题:203 移除链表元素 206 反转链表

3. 常用算法

 

posted @ 2021-01-03 11:47  沙漏哟  阅读(319)  评论(0编辑  收藏  举报