Python 现代开发学习笔记

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

笔记正文与全部题解 · Ctrl / ⌘ K