02-04 最长连续达标天数
题目
在现有统计循环中增加当前连续长度与历史最长长度。输入 35、40、0、45、50、60 得到 3,第三条将当前长度归零。完成第三章后可用 03-01 对照函数版。
推导与做法
current 表示刚处理的这一天结尾处连续达标了几天,best 表示此前出现过的最大长度。达标时 current 加一,不达标时归零;每轮再用 current 更新 best。
| 分钟 | current | best |
|---|---|---|
| 35 | 1 | 1 |
| 40 | 2 | 2 |
| 0 | 0 | 2 |
| 45 | 1 | 2 |
| 50 | 2 | 2 |
| 60 | 3 | 3 |
只保存这两个数即可完成一次遍历,时间为 O(n),额外空间为 O(1)。
过程图
%% 每个节点保留输入、执行位置或执行后的实际状态。
flowchart TD
S0["读 35:current=1,best=1"]
S1["读 40:current=2,best=2"]
S0 --> S1
S2["读 0:current=0,best=2"]
S1 --> S2
S3["读 45、50、60:current=3,best=3"]
S2 --> S3
classDef default fill:#EEF0FB,stroke:#4657B5,color:#24324A
linkStyle default stroke:#4657B5
实现与运行
查看带注释实现。实现只使用本章已经学过的语法。
在本题目录 02-04 中运行,使用已经选择的 Python 3.12 解释器。
# 使用项目解释器运行本题,题号决定执行哪一组演示。
python solution.py
查看本题运行结果
# 与上面的手算状态和题目数值逐项比较。
35 1 1
40 2 2
0 0 2
45 1 2
50 2 2
60 3 3
最长连续达标天数 3