
一起动脑筋 · 先看一个小故事
女孩要连续处理很多“谁最先报名”的请求。机器人先看操作,而不是先挑一个听起来厉害的算法。
把过程摊开来看
- 明确操作按报名先后取人
- 保留顺序选择队列
- 处理规模估算人数与次数
- 验证规则先来的先处理
数据结构与算法要一起服务任务。
看数据怎么变化、最常查询什么、规模多大,再选择。结构保存需要的关系,算法利用这些关系完成操作。
01先选算法还是先选数据结构?
通常二者是一起考虑的。
因为“数据怎么存”会影响“算法怎么处理”,算法需求也会反过来决定需要什么结构。
02先看数据关系
顺序数据
数组 / vector
后进先出
stack
先进先出
queue
一般连接
graph
03再看最常见操作
问题到底经常做什么:
- 按下标访问?
- 找最小值?
- 不断插入删除?
- 寻找最短路?
- 大量区间查询?
04再看数据规模
同样的逻辑:
n ≤ 100
O(n²) 可能非常轻松。
n ≤ 200000
O(n²) 通常就太大了。
05题目关键词能直接决定算法吗?
不能机械对应。
06怎样形成选择流程?
建立模型→列出可行算法→用数据范围筛选
最后再比较实现难度、空间和正确性风险。
你已经知道了什么
- 数据结构和算法应该一起设计。
- 先看数据关系和常用操作。
- 数据规模决定某些复杂度是否可行。
- 题目关键词不能机械套算法。
- 正确模型 + 复杂度估算是选择方案的核心。
下一篇:什么是边界情况?
轮到你来试一试
如果任务改成“撤销最近一次报名”,队列还是最直接的选择吗?
想好了吗?点开看解释
最近一次优先撤销更像栈。任务规则变了,合适的操作顺序也会变。