数据结构与算法

回溯法

  • 一种通过探索所有可能的候选解来找出所有解的算法。如果候选解被确认不是一个解(或者不是最后一个解),回溯算法会通过在上一步进行一些变化抛弃该解,即回溯并且再次尝试

morris遍历介绍

  • morris遍历是二叉树遍历算法的超强进阶算法,跟递归、非递归(栈实现)的空间复杂度,morris遍历可以将非递归遍历中的空间复杂度降为O(1)。从而实现时间复杂度为O(N),而空间复杂度为O(1)的精妙算法。
  • morris遍历利用的是树的叶节点左右孩子为空(树的大量空闲指针),实现空间开销的极限缩减。
  • https://zhuanlan.zhihu.com/p/101321696

不重复子字符串的滑动窗口算法

大数越界问题:随着 n 增大,f(n) 会超过 Int32 甚至 Int64 的取值范围,导致最终的返回值错误。

  • 做斐波那切数列时注意到的在这里插入图片描述

字符串中的回文子串以及最长回文子串

  • 字符串中回文子串的数目

    • 中心拓展
      在这里插入图片描述
  • Manacher算法(马拉车算法)

    • 利用回文特性在这里插入图片描述
      在这里插入图片描述
  • 岛屿数量:可以采用深度优先遍历,广度优先遍历,

    • 还可以采用并查集
  • 搜索回溯算法 leetcode 39 组合之和

    • 什么时候使用used数组,什么时候使用begin变量
      • 排列问题,讲究顺序(即 [2, 2, 3] 与 [2, 3, 2] 视为不同列表时),需要记录哪些数字已经使用过,此时用 used 数组
      • 组合问题,不讲究顺序(即 [2, 2, 3] 与 [2, 3, 2] 视为相同列表时),需要按照某种顺序搜索,此时使用 begin 变量。
  • 用rand7()实现rand10()
    在这里插入图片描述

    • 1, 拒绝采样
    • 2, 进行优化

背包九讲问题

遇到比较的题,考虑能否自定义比较器,如leetcode179题8

基本计算器问题,leetcode224,227

洗牌算法(Fisher-Yates) leetcode 384

在这里插入图片描述

滑动窗口的最大值

  • 剑指offer59题

约瑟夫环的问题:剑指offer62

在这里插入图片描述

循环依赖 leetcode补充题23,leetcode207,210

  • 有的面试官要求判断是否有循环依赖,有的则要求给出一个可行的顺序,解决这类问题的利器就是----拓扑排序
  • 拓扑排序算法过程:
    • 选择图中一个入度为0的点,记录下来
    • 在图中删除该点和所有以它为起点的边
    • 重复1和2,直到图为空或没有入度为0的点

图的表示法与常用的转化算法

回溯算法 leetcode46,47

kmp算法

  • https://www.cnblogs.com/tangzhengyue/p/4315393.html
  • https://www.cnblogs.com/jiezai/p/11146865.html

二叉搜索树的三个特性:

  • 二叉搜索树的中序遍历的序列是递增排序的序列

并查集 leetcode 547 省份数量

鸡蛋掉落 leetcode 887(理解较为困难,要多看几遍)

递归的时间复杂度计算公式

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值