辅助结构(栈,堆,队列)
常见题干
- 动态变化的,要求复杂度为
O(1)
- 模拟某个过程,该过程符合某种数据结构的特性
题目思路
实际上就拿最简单的寻找最大值举例,其中的变量maxnum
也可以视作一个“辅助结构”,它伴随数值的变化而变化,提供记录的作用。而这类题目的关键就是寻找同步关系并同步记录,将需要使用的数据存在某个结构中,然后根据要求决定如何存储(需要先取什么),一般是需要排序,可以按以下两种思路:
- 添加时进行条件判断:往往用于单调栈(队列),pop出的元素必须是以后再也用不到的
- 维护堆结构:无法保证以后用不到
涉及题目
- 剑指 Offer 30. 包含min函数的栈 - 力扣(LeetCode) (leetcode-cn.com)
- 剑指 Offer 31. 栈的压入、弹出序列 - 力扣(LeetCode) (leetcode-cn.com)
- 剑指 Offer 41. 数据流中的中位数 - 力扣(LeetCode) (leetcode-cn.com)
- 剑指 Offer 59 - II. 队列的最大值 - 力扣(LeetCode) (leetcode-cn.com)
其它类型
这些类题目都比较有题目针对性,都在一刷的具体题目中进行了分析,下面只简单给出思路及对应题目
状态机
- 思路:先确定有哪些状态,然后寻找转移条件,画图即可
- 典型题目:
滑动窗口
- 思路:滑动窗口类型的题精髓在于可以根据当前情况调动边界,无论是通过已经排好序的比较,或是某种规定的规则。跟随每个状态限定下一步的边界or下一步走的方向,逐步逼近答案
- 典型题目:
大数问题
- 思路:大数的表示需要使用字符串,按位添加;大数的计算需要使用快速幂的方法
- 典型题目:
位运算
- 思路:当你确定某个题使用位运算时,不要考虑整个数而是只考虑某位的变化,整个变量的变化和位的变化是一致的!
- 典型题目:
链表操作
- 思路:比较简单,主要是画图熟悉链表的基础操作即可
- 典型题目: