[NEO自我反思]极限开发,需追求执行效率与开发效率的平衡

1. 背景事件

1.1 记一次编码比赛的失利

1.2 抽象题目存取金条业务的办理时刻

  • 这是个抽象后的题目, 意思是一样的, 先把题目放出来, 感兴趣的朋友可以尝试解答一下; 空了我会写一个三种方法的题解;

【题目】

假设在一个伟大的银行, 有一群客户等着办理业务, 存取金条!客户到达时间以一个数组给出, 数值单位为 分钟, 每一个客户只有 存金条, 或者 取出金条两种业务中的一种;现给出 客户到达时间 A 数组, 以及一个需要办理业务的 T 数组, 每个客户办理业务需要的时间都是1分钟; 请计算出每个客户的业务办理时刻(精确到分钟), 多个客户的业务每分钟只能办理一个人的一个业务, 规则如下:

  1. 如果上一分钟没有办理业务, 则优先办理 存金条 业务;
  2. 如果上一分钟有业务办理, 则当前优先办理和上一分钟相同的业务;
  3. 多个同类型业务的客户, 按到达银行的先后顺序办理;
  4. 假设客户按到达先后顺序依次编号, 并且已经按到达时刻排序;
  5. 请返回一个数组, 包含每个客户的业务办理时刻;
  6. 业务只有两种类型, 假设 0 表示 取出, 1 表示 存储;
  7. 假设业务量很大, 客户很多;
  • 示例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: 其他细节后面再补充。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

逸云沙鸥のIHave@Dream

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值