返回导学首页
算法模式

先识别题型,再选择代码块

很多题换了故事背景,但核心模式相同。先看它在问什么,再想需要维护什么变量。

入门扫描类

阈值统计

题目常问“大于 50 的有几个”“低于警戒线几次”。做法是从头扫一遍,每遇到满足条件的数据就让计数器加 1。

最大/最小值

题目要找最高分、最低温、最大差值时,通常不需要保存全部答案。扫描时维护当前最优值,看到更好的就更新。

存在/全部达标

如果题目问“是否有人迟到”或“是否全部合格”,重点是布尔变量。遇到反例或满足条件的对象时,及时改变 true / false。

连续段

题目出现“连续几天”“最长一段”“最多连续”时,通常要维护当前连续长度;一旦断开就清零,同时保留历史最好。

中级结构类

前缀和

如果题目反复询问一段区间的总分、总费用或总人数,先把“到当前位置为止的累计和”存起来。之后区间和可以用两次相减得到。

排序 + 贪心

当题目要安排顺序、选择最多任务、分配资源时,先排序往往能简化决策。每一步选择当前看起来最合理的一项,并保证不破坏后续。

双指针

题目涉及配对、去重、两端靠近,或已经排序的数组时,可以考虑双指针。一个指针向左或右移动,依据当前和、距离或条件调整。

区间合并

看到开始时间和结束时间、覆盖范围、预约时段这类题,要先按起点排序。当前区间和上一个重叠就合并,不重叠就开启新区间。

高级算法类

BFS 最短路

如果每一步移动成本相同,比如网格走路、按钮跳转、状态一步变化,用队列一层层扩展。第一次到达目标时,通常就是最短步数。

拓扑排序

题目出现课程先修、任务依赖、必须先做 A 再做 B 时,可以把关系看成有向图。不断取没有前置要求的点,也能判断是否存在环。

动态规划

当一个大问题可以由更小位置、天数、容量或状态推出时,考虑 DP。关键是定义状态含义,再写出从旧状态到新状态的转移。

二分答案

如果答案有单调性,比如时间越多越容易完成、容量越大越可行,就可以猜一个答案并检查。根据可行/不可行缩小范围。

去题库练习