表达式解析是栈的看家副本:数字栈、符号栈、递归下降,三件套凑齐就能通关四则运算全系列。本合集收录栈类题目。

表达式解析

leetcode 1006

逆波兰一般要维护数字、操作符两个栈;这题操作符顺序是固定循环的,可以省掉操作符栈。乘除是连着算的,加法单独算,减法减的总是一段乘除的结果,按此模拟即可。需要注意负数除法的取整方向。

leetcode 394

可以用栈迭代模拟,也可以 dfs。这里新学了一个名词:这种 dfs 叫递归下降解析——「下降」指从最高层级一层层往下匹配,是处理嵌套结构的标准方式。

它的特点是维护一个全局 index 扫描字符串。相比每次去搜索匹配的右括号($O(n...

Read more

滑动窗口和双指针


滑动窗口和双指针

双指针的精髓在于「不回头」:每个元素只被指针扫过常数次,$O(n^2)$ 的枚举就塌缩成 $O(n)$。本合集收录滑动窗口与双指针题目。

分组循环

同向双指针的一种特殊形态,可以省掉一个显式指针。

适用场景

数组会被切成若干组,每一组的处理逻辑相同。

核心思想

外层循环负责进组前的准备(记录起点)和出组后的统计(更新答案);内层循环负责走完这一组,找出它最远在哪结束。

模板

n = len(nums)
i = 0
while i < n:
    start = i
    while i < n and ...:
        i += 1
    # 从 star...

Read more