March 08, 2021By Gethin Ge← Back to Blog

算法


这个篇文章主要是算法学习大纲。
主要参考 https://github.com/youngyangyang04/leetcode-master 的学习路线,标号----均为leetcode题号。

数组

二分查找

搜索插入位置--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.