跳至主要內容
二叉树
二叉树大纲

满二叉树

  1. 对于k层的二叉树来说,拥有 2k -1 个结点的二叉树称为满二叉树
  2. 度为0的结点(叶子结点)都在同一层上
image-20231030212729924

完全二叉树:

  1. 二叉树的结点位置按照对应的完全二叉树的位置相吻合
  2. 最后一层的结点,一定是从左往右依次排满的

鲨瓜...大约 58 分钟算法二叉树二叉树遍历平衡二叉树搜索二叉树
动态规划

动态规划与贪心的区别:

  • 动态规划的每一步都是由上一步推导出来来的
  • 贪心则是每一步尽量选择最优解,与上一步没有关系

动态规划五部曲

  • 确定dp数组(dp table)以及下标的含义
  • 确定递推公式
  • dp数组如何初始化
  • 确定遍历顺序
  • 举例推导dp数组

509. 斐波那契数


鲨瓜...大约 80 分钟算法动态规划
哈希表

242. 有效的字母异位词

给定两个字符串 *s**t* ,编写一个函数来判断 *t* 是否是 *s* 的字母异位词。

**注意:**若 *s**t* 中每个字符出现的次数都相同,则称 *s**t* 互为字母异位词。


鲨瓜...大约 13 分钟算法哈希表
回溯

简单介绍

回溯就是一种搜索的方式,它通常用于在搜索过程中撤销回退一些步骤,以便在发现错误或达到某种条件时重新尝试其他路径。

回溯算法的效率其实并不高,虽然可以通过剪枝操作来提高效一些效率,但是效率仍然不高!

通过回溯做的题目类型

  • 组合问题:N个数里面按一定规则找出k个数的集合
  • 切割问题:一个字符串按一定规则有几种切割方式
  • 子集问题:一个N个数的集合里有多少符合条件的子集
  • 排列问题:N个数按一定规则全排列,有几种排列方式
  • 棋盘问题:N皇后,解数独等等

鲨瓜...大约 42 分钟算法回溯
图论

dfs 和 bfs 的区别

深度优先遍历(dfs): 顺着一个方向遍历,就像是不到黄河不回头,直到没有元素了,再换另一个方向继续遍历。

广度优先遍历(bfs): 先遍历与本节点连接的所有节点,然后在遍历与下一个节点相连接的所有节点

其实dfs就是回溯,当遍历到头时,就需要回溯换另一个方向继续遍历。在二叉树中的递归遍历其实就是 dfs,而迭代遍历就是 bfs。

下面通过俩张动图,体会一下dfs和bfs的区别

dfs


鲨瓜...大约 16 分钟算法图论
数组

217 存在重复元素

给你一个整数数组 nums 。如果任一值在数组中出现 至少两次 ,返回 true ;如果数组中每个元素互不相同,返回 false

示例 1:

输入:nums = [1,2,3,1]
输出:true

鲨瓜...大约 40 分钟算法数组二分法
栈和队列

232. 用栈实现队列

请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作(pushpoppeekempty):


鲨瓜...大约 12 分钟算法队列
贪心算法

贪心的本质是选择每一阶段的局部最优,从而达到全局最优

例如,有一堆钞票,你可以拿走十张,如果想达到最大的金额,你要怎么拿?

指定每次拿最大的,最终结果就是拿走最大数额的钱。

每次拿最大的就是局部最优,最后拿走最大数额的钱就是推出全局最优。

贪心算法一般分为如下四步

  • 将问题分解为若干个子问题
  • 找出适合的贪心策略
  • 求解每一个子问题的最优解
  • 将局部最优解堆叠成全局最优解

鲨瓜...大约 35 分钟算法贪心
链表

203. 移除链表元素

给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回 新的头节点


鲨瓜...大约 14 分钟算法链表