1. 背景事件
1.1 记一次编码比赛的失利
1.2 抽象题目存取金条业务的办理时刻
- 这是个抽象后的题目, 意思是一样的, 先把题目放出来, 感兴趣的朋友可以尝试解答一下; 空了我会写一个三种方法的题解;
【题目】
假设在一个伟大的银行, 有一群客户等着办理业务, 存取金条!客户到达时间以一个数组给出, 数值单位为 分钟, 每一个客户只有 存金条, 或者 取出金条两种业务中的一种;现给出 客户到达时间 A 数组, 以及一个需要办理业务的 T 数组, 每个客户办理业务需要的时间都是1分钟; 请计算出每个客户的业务办理时刻(精确到分钟), 多个客户的业务每分钟只能办理一个人的一个业务, 规则如下:
- 如果上一分钟没有办理业务, 则优先办理 存金条 业务;
- 如果上一分钟有业务办理, 则当前优先办理和上一分钟相同的业务;
- 多个同类型业务的客户, 按到达银行的先后顺序办理;
- 假设客户按到达先后顺序依次编号, 并且已经按到达时刻排序;
- 请返回一个数组, 包含每个客户的业务办理时刻;
- 业务只有两种类型, 假设 0 表示 取出, 1 表示 存储;
- 假设业务量很大, 客户很多;
- 示例1:
A = [0, 0, 1, 1]
T = [0, 1, 1, 0]
ans = [2, 0, 1, 3]
说明:
从0时刻开始, 之前没有办理业务, 故优先办理 存储 (T 中值为1)业务,
在1时刻, 用户2也是存储, 优先执行;
在2时刻, 没有需要存储的业务, 所以执行用户0的取出请求,
最后 3时刻处理用户3的取出业务;
2. 解题过程的思考
- 有特殊的优先级
- 优先级会根据上一时刻的执行动作变化;
3. 发现的缺陷和应对措施
- 数据结构还没有烂熟于心 => 多学多练
- 杀鸡用牛刀 => 充分挖掘题目条件, 多种算法快速评估;
- 重构未报证一致性 => 牢记
小步快跑
的方法, 牢记并灵活应用重构的十六字真言- 旧的不变
- 新的创建
- 一键切换
- 旧的再见
- 充分识别 TLE 到 WA, 说明性能可能提升了, 但是逻辑被改了, 所以要仔细对比最新的改动是不是等价的逻辑!!!
PS: 其他细节后面再补充。