算法
这个篇文章主要是算法学习大纲。
主要参考 https://github.com/youngyangyang04/leetcode-master 的学习路线,标号----均为leetcode题号。
-
- 二叉树的遍历方式
- 前序遍历--144--
- 中序遍历--145--
- 后序遍历--94--
- 层级遍历--102--
- 二叉树的属性
- 对称二叉树--101--
- 二叉树最大深度--104--
- 二叉树最小深度--111--
- 完全二叉树的节点个数--222--
- 平衡二叉树--110--
- 二叉树的所有路径--157--
- 左叶子之和--404--
- 找树左下角的值--513--
- 路径总和--112--
- 二叉树的修改与构造
- 翻转二叉树--226--
- 从中序与后续遍历序列构造二叉树--106--
- 最大二叉树--654--
- 合并二叉树--617--
- 求二叉搜索树的属性
- 二叉搜索树中的搜索--700--
- 验证二叉搜索树--98--
- 二叉搜索树的最小绝对差--530--
- 二叉搜索树中的众数--501--
- 把二叉搜索树转换为累加树--538--
- 二叉树公共祖先问题
- 二叉树的最近公共祖先--236--
- 二叉搜索树的最近公共祖先--235--
- 二叉搜索树的修改和构造
- 二叉搜索树的插入操作--701--
- 删除二叉搜索树的节点--450--
- 修剪二叉搜索树--669--
- 将有序数组转换为二叉搜索树--108--
- 动态规划
数组
二分查找
搜索插入位置--35--
双指针
移除元素--27--
滑动窗口
长度最小的子数组--209--
链表
链表的理论
链表的种类
单链表、双链表、循环链表
链表的存储方式
数组是在内存中是连续分布的,但是链表在内存中可不是连续分布的。
链表操作
添加、删除、查询
数组和链表在不同场景下的性能分析
插入删除的时间复杂度是O(1),查询的时间复杂度是O(n)
链表的经典题目
虚拟头节点(哨兵节点)
移除链表元素--203--
链表的基本操作
设计链表--707--
反转链表
反转链表--206--
环形链表
环形链表II--142--
哈希表
哈希表介绍
哈希表是根据关键码的值而直接进行访问的数据结构。
哈希表中关键码就是数组的索引下标,然后通过下标直接访问数组中的元素。
哈希函数
通过hashCode把名字转化为数值,一般hashcode是通过特定编码方式,可以将其他数据格式转化为不同的数值,这样就把value映射为哈希表上的索引数字了。
哈希碰撞
拉链法、线性探测法。
常见的三种哈希结构
数组、set(集合)、map(映射)
数组作为哈希表
有效的字母异位词--242--
赎金信--383--
set作为哈希表
两个数组的交集--349--
map作为哈希表
两数之和--1--
三数之和--15--
四数之和--18--
四数相加II--454--
字符串
什么是字符串
字符串是若干字符组成的有限序列,也可以理解为是一个字符数组
要不要使用库函数
反转字符串--344--
双指针法、反转系列
反转字符串II--541--
剑指Offer 05.替换空格
翻转字符串里的单词--151--
KMP
实现 strStr()--28--
重复的子字符串--459--
栈和队列
栈与队列的理论基础
队列是先进先出,栈是先进后出
栈经典题目
栈在系统中的应用
简化路径--71--
括号匹配问题
有效的括号--20--
字符串去重问题
删除字符串中的所有相邻重复项--1047--
逆波兰表达式问题
逆波兰表达式求值--150--
队列的经典题目
滑动窗口最大值问题
滑动窗口最大值--239--
求前 K 个高频元素
前 K 个高频元素--347--
二叉树
二叉树的遍历方式
前序遍历--144--
中序遍历--145--
后序遍历--94--
层级遍历--102--
二叉树的属性
对称二叉树--101--
二叉树最大深度--104--
二叉树最小深度--111--
完全二叉树的节点个数--222--
平衡二叉树--110--
二叉树的所有路径--157--
左叶子之和--404--
找树左下角的值--513--
路径总和--112--
二叉树的修改与构造
翻转二叉树--226--
从中序与后续遍历序列构造二叉树--106--
最大二叉树--654--
合并二叉树--617--
求二叉搜索树的属性
二叉搜索树中的搜索--700--
验证二叉搜索树--98--
二叉搜索树的最小绝对差--530--
二叉搜索树中的众数--501--
把二叉搜索树转换为累加树--538--
二叉树公共祖先问题
二叉树的最近公共祖先--236--
二叉搜索树的最近公共祖先--235--
二叉搜索树的修改和构造
二叉搜索树的插入操作--701--
删除二叉搜索树的节点--450--
修剪二叉搜索树--669--
将有序数组转换为二叉搜索树--108--
回溯算法
组合
组合--77--
电话号码的字母组合--17--
组合总和--39--
组合总和2--40--
组合总和3--216--
分割
分割回文串--131--
复原IP地址--93--
子集
子集--78--
子集2--90--
排列
全排列--46--
全排列2--47--
棋盘问题
N皇后--51--
解数独--37--
其他
递增子序列--491--
重新安排行程--332--
贪心算法
理论基础
简单题目
分发饼干--455--
K次取反后最大化的数组和--1005--
柠檬水找零--860--
序列问题
摆动序列--376--
单调递增的数字--738--
股票问题
买卖股票的最佳时机--122--
买卖股票的最佳时机含手续费--714--
两个维度权衡问题
分发糖果--135--
根据身高重建队列--406--
区间问题
跳跃游戏--55--
跳跃游戏2--45--
用最少数量的箭引爆气球--452--
五重叠区间--435--
划分字母区间--763--
合并区间--56--
其他问题
最大子序和--53--
加油站--134--
监控二叉树--968--
动态规划
Written with StackEdit.