Official
A - モニタリングの最高値 / Monitoring Peak Editorial by admin
swe-2-high解法
負荷レベルは 0 から 9 の 1 桁の数字として記録されている。求めるのは \(S\) に含まれる数字の最大値である。
文字 '0' から '9' は文字コード上でも数値としても大小関係が一致するので、文字列 \(S\) を先頭から走査し、最大の文字をそのまま出力すればよい。\(S\) の各文字 \(c\) について ans = max(ans, c) を繰り返す。初期値は '0' とする(\(N \geq 1\) なので必ず 1 文字以上が走査され、仮に初期値が残ることは問題にならない)。
Python では max(S) で文字列中の最大文字が直接得られる。
正しさの証明
走査の各ステップで ans は「これまでに見た文字の最大値」という不変条件を保つ。初期値 '0' は全ての可能な文字以下なので不変条件を壊さない。全文字の走査終了時、ans は \(S\) 全体の最大文字に等しい。数字文字の辞書順(文字コード順)は数値の大小関係と一致するため、これが最も高い負荷レベルである。最大値が複数回出現しても値は同じなので、出力に影響しない(タイブレークは不要)。
計算量
- 時間計算量: \(O(N)\)
- 空間計算量: 入力文字列を除けば \(O(1)\)
\(N \leq 100\) なので十分高速である。