数据结构与算法目录

数据结构与算法应用

    vue-diff

    实现可编辑的树形table

    区间交集的判断


深度优先遍历

    求根到叶子节点的数字之和  二叉树的最大与最小树深  从先序遍历还原二叉树  翻转二叉树

哈希表

    最长连续序列  罗马数字转正数  

回溯

    全排列

双指针

    移动零  三数之和  最接近的三数之和  盛水最多的容器  删除排序数组中的中位数

线性表

    环形链表  相交链表 删除链表倒数第N个节点  两数相加  旋转链表  奇偶链表  翻转链表 

    复制带随机指针的链表  合并两个有序链表  移除链表元素  回文链表  LRU缓存机制

    用两个栈模拟队列  有效的括号

    求根到叶子节点数字之和  基本概念与二叉树  线索化  树与二叉树的转换  哈夫曼树及哈夫曼编码

    二叉树

        路径和、搜索二叉树的最近公共祖先  相同树、镜面树  根据遍历结果创建树  最近公共祖先

        四种遍历方式  二叉树先序、中序、后序遍历的非递归实现  最大与最小树深

    N叉树

        先序遍历与后序遍历

    术语

    存储结构

        邻接矩阵  邻接表  十字链表  边集数组

    遍历

        深度优先遍历  广度优先遍历

    最小生成树

        prim  kruskal

    最短路径

        dijkstra  Floyd

    拓扑排序

    关键路径

查找

    线性表--折半、顺序、索引(基础)  二分查找

排序

    选择、插入  冒泡  快排  归并

贪心

    分配饼干  卡车上的最大单元  区间交集判断  用最少数量的箭引爆气球  合并区间  跳跃游戏

    判断子序列  给定行和列的和求可行矩阵  最大子序和  使括号有效的最小添加  分发糖果

    两地调度  交换字符使得字符串相同  找出可行的回文串个数  单调递增的数字  找零钱

    买卖股票的最佳时机  玩筹码  最长公共前缀

动态规划

    最长递增子序列个数  最长上升子序列  俄罗斯套娃  最大子数组和  乘积最大子数组  无重复字符的最长子串  爬楼梯  最长回文子串

位运算

    只出现一次的数字

其他

    括号生成


深度优先遍历

    两种实现方式:

        递归

        迭代+栈

回溯

    回溯的核心思想是在一颗树(可看作树)上进行深度优先搜索,通过不断尝试寻找解,但它不是一条道走到黑,它会适可而止的原路返回寻找新的可能路径

    回溯较深度优先遍历多了状态重置过程

贪心

    必须基于上一个子问题的解选择更新当前解

    只需要对其中一个子问题求解即可

动态规划

    把原问题拆解求解,最后将各个子问题的解做merge处理,一般要求记录下各个子问题的解

    可行性:将子问题的解进行组合能得到原问题的解

    与普通递归的区别:是否存在重叠子问题,DP中只会被求解一次

    关键点:

        状态定义:定义子问题(dp[i]表示问题规模为1时的最长上升子序列是否天然具有状态同一性)

        状态的转移:子问题之间的关系(由dp[i-1]的最长序列+1能推出dp[i]的最长序列)

        初始化:子问题的初始值(dp[0......i]的初始均为1)

        边界条件:状态转移条件

    分类

        线性动态规划

            状态的推导是按照问题规模 i 从小到大依次推过去的,较大规模的问题的解依赖较小规模的问题的解,主要工作领域为基于位置的单串、双串和矩阵问题类型

            视情况取i的位置,一般根据题意分析依赖项:前一个或前n个

    路径问题:广度优先搜索

滑动窗口/双指针

    子串问题、原地移动、或者需要计算出距离时

    一般分为快慢指针,快指针扫描到特定值时做对应处理后移动慢指针,或者,两个指针按一定条件择其一移动

二分

    如果对时间复杂度的要求有log,一般都需要二分

哈希表

    key、value

    随机访问

链表

    出入顺序



https://visualgo.net/zh

你可能感兴趣的:(数据结构与算法目录)