极客大学算法训练营笔记
一、数据结构和算法总览
1.刻意练习
过遍数:五毒神掌 ; 刻意练习自己的弱项
练习基本功很重要
主动式反馈 : 寻求更好的方法和方式:leetcode高手代码
被动式反馈 : code review 教练指点
需要得到肌肉式记忆
2.环境配置及工具类
command + left/right : 去到行头行尾
Option + left/right : 光标按单词切分
Shift + command + right : 当光标在行头的时候,选中整个行
Ctrl+N:到下一行
Ctrl+P:到上一行
Ctrl+1K:从光标处开始删除,直到行尾
Fn + delete : 向后删除
自顶向下的编程方式,借鉴新闻稿的形式
最关键的东西最有价值的东西放前面,不要写成散文,看了半天看不懂在干嘛。最关键的函数放前面
二、时间复杂度、空间复杂度
1.常用时间复杂度表和对比图
假设N等于多少的时候,程序会执行x次,那么这个n和x的关系,就是时间复杂度了
需要对自己写的程序的时间和空间复杂度了解,写完之后要分析时间和空间复杂度。越简单程序执行越快越高效
1.1 小结
一维的数组进行二分查找,就是logn
二维的矩阵查找,有序的矩阵进行查找,这时候被降了一维就不是n平方的算法,是O(n)
归并排序 O(nlogn),是最好的!!
1.2 面试常考
二叉树遍历-前序、中序、后序写一下程序,然后时间复杂度是多少
时间复杂度是O(n),n就是二叉树里面的节点总数。
为什么?不管是前序中序后序它遍历二叉树的时候每个节点会访问一次且仅访问一次。所以它的时间复杂度就是线性于二叉树的节点总数,也就是O(n)的复杂度
图的遍历,时间复杂度是多少?
- 图里面的每个节点访问一次且仅访问一次,所以它的时间复杂度是O(n),这里的n就是图里面的节点总数
搜索算法:DFS(深度优先) 、BFS(广度优先) 时间复杂度是多少?
- 节点都只访问一次,所以是O(n),n指的是搜索空间里面的节点总数
二分查找时间复杂度是多少?
- logn
2.空间复杂度
如果代码里面开了数组,那么数组的长度基本上就是你的空间复杂度
比如开了一维数组,那么就是O(1)
如果开了二维数组,是数组的n平方,那么空间复杂度就是n平方的。O(2^n)
如果有递归的话,递归最深的深度就是空间复杂度的最大值
如果又有递归又有数组的话,那就是两者之间的最大值就是空间复杂度
三、数组、链表、跳表
1.三者的数据结构和基本特性
1.1数组Array
用Python的语法就是 list = []
增加删除引起群移,时间复杂度是O(n)
查找是O(1)
1.2链表Linked list
头指针: head ; 尾指针: tail ; 节点 : node
单链表:只有一个next指针
双向链表:有next指针和prev指针
循环链表: tail的next指向head
增加删除 : 时间复杂度 O(1)
头结点和尾节点查找是O(1),其他节点查找是O(n)
1.3跳表 skip list
升维思想,空间换时间
跳表只用于链表里元素有序的情况,也就是跳表里面的里面的元素始终必须是有序的
所以跳表对标的是二叉搜索树种的平衡树(AVL Tree)和二分查找
插入、搜索、删除时间复杂度都是O(logn)
四、栈、队列、优先队列、双端队列
栈stack:先入后出(first in last out)
- 添加删除O(1),因为是无序的所以查询O(n)
队列queue : 先入先出(first in first out )
- 添加删除O(1),因为是无序的所以查询O(n)
双端队列deque(double-end queue): 头和尾都可以进行元素的出和入
- 添加删除O(1),因为是无序的所以查询O(n)
优先队列priority queue:
插入O(1)
取出O(logn) 即按照元素的优先级取出
底层具体实现的数据结构较为多样和复杂: heap、bst(binary search tree 二叉搜索数)、treap
五、哈希表、映射、集合
1.哈希表
Hash function
通过哈希函数把要存储的值映射到一个位置,位置就是它的下标index
Hash collisions
通过哈希函数得到的下标值一样就是哈希碰撞
可以用拉链式解决冲突法,在碰撞的地方增加维度,拉一个链表
哈希表可以认为都是O(1)的复杂度,计算机内存大,哈希表可以开很大
2.映射和集合
从哈希表抽象出来的常用map和set (map就是Python的dict)
map(键值对 key-value): key不可以重复,value可以重复
set (单个元素): 不重复元素的集合
极客大学算法训练营笔记相关推荐
- 极客大学算法训练营_训练营与大学
极客大学算法训练营 来自技术招聘公司的数据 对编程训练营进行编程似乎是不可能的. 他们说,与其花四年的大学时间,您可以学习如何成为一个为期三个月的计划的软件工程师. 从表面上看,这听起来更像是特朗普大 ...
- 极客时间-算法训练营1.2 实战题目解析:移动零
一 序 本文属于极客时间-算法训练营 学习笔记系列. 二 刷题步骤 第一遍 五分钟:读题 + 思考 直接看解法:多看几种,比较解法优劣 背诵.默写好的解法 第二遍 马上自己写 --> Leetc ...
- 极客大学算法课-01
数据结构和算法是一个程序员的基本功,但在这方面一直是弱项,发毒誓学了几百遍但一直不得要领,所以报名了极客时间的算法大课,跟着谭超再从头到尾刷一遍,希望这次能有质的提升. 极客时间的这个课程,老师规定了 ...
- 极客时间 算法训练营 毕业总结
不知不觉8周的算法训练营也接近尾声,这期间训练营对自己的影响有三方面 一方面是收获了刻意练习,终身成长这些可以产生长远影响的思想,这里推荐三本书 卡罗尔·德韦克的<终身成长>.安德斯·艾利 ...
- 极客时间-算法训练营-第二周
文章目录 学习笔记 1.哈希表 定义 图示 具体实现是Map和Set HashSet源码分析 HashMap源码分析 时间复杂度 实战题目 [242. 有效的字母异位词](https://leetco ...
- 极客时间算法训练营2019版LeetCode练习题题库
03课 数组.链表.跳表 两数之和题目 Arrays实战 LeetCode#11 盛最多水的容器 LeetCode#283 移动零 LeetCode#70 爬楼梯 LeetCode#15 三数之和 L ...
- 极客时间 算法训练营 第一周总结
学习总结 学习内容 课程内容 第三课 数组 链表 跳表 第四课 栈 队列 知识点总结 数组 数组用一块连续的内存空间,来存储相同类型的一组数据. 支持随机访问,时间复杂度 O(1) 插入.删除操作比较 ...
- 可复制领导力 - 极客大学架构师训练营 架构师老A
说明 分享人: 架构师老A 分享主题:<可复制领导力> 分享提纲: 个人能力成长阶梯 东西方领导力差异 管理者角色认知 架构师老A自我介绍 老A亲爱的老师们,同学们,大家好晚上,今晚由我给 ...
- 极客HTTP协议学习笔记破冰篇(1-7)
极客HTTP协议学习笔记破冰篇(1-7) 前言 各篇章笔记链接 一.学习笔记 1.HTTP的前世今生 2.HTTP是什么 3.与HTTP相关的各种概念(上) 4.与HTTP相关的各种概念(下) 5.常 ...
最新文章
- 浅谈文本词向量转换的机制embedding
- hibernate版本_Myeclipse 2020.5 版本首发!支持 Java14
- flex 正则表达式匹配规则
- 给不会调用C++STL库中二分函数lower_bound,upper_bound,binary_search同学的一些话!
- Java 重写与重载
- Docker快速搭建Tuleap项目管理平台
- 用 Python 编写一个天气查询应用
- layer 同步调用_YYText源码解读-YYText同步/异步渲染流程(一)—UIView与CALayer
- 12 个实用的前端开发技巧总结
- 二数 (埃森哲杯第十六届上海大学程序设计联赛春季赛暨上海高校金马五校赛)...
- [转载] real和imag在python_Python numpy.imag() 使用实例
- 认清面向服务架构SOA的真实面目
- jQuery AJAX 方法
- rbf神经网络 c语言,RBF神经网络极简介绍及其算法R语言实现
- 快速学习navicat安装教程
- 三角形~~行列式~~皮克公式~~gcd
- 2021苹果最新供应链名单公布
- cad图形不见了怎么办_画好的cad图纸文件不见了怎么找回?
- python数据分析案例实战——融360客户贷款风险预测(信用卡)
- Git 工具 - 储藏(Stashing)