官方解答 · 置頂Python
官方解答|訊號狀態報表
官方解答
Python #301:訊號狀態報表
解題規則
記錄器以共用工具逐筆更新狀態,最後由摘要工具整理整段歷史。
update(state,x,index,first_value) 的規則是「把原值加到狀態」;first_value 是整份輸入的第一格,空時為0,index 是原索引。從狀態0開始逐格呼叫 update,保留每次更新後數值。summarize(part) 回傳歷史清單的第一格值出現的次數,空時為0。最後回傳 [全部狀態歷史, 摘要結果]。兩個函式分別負責更新與統計。
處理步驟
狀態從 0 開始;每格傳入原索引與整份輸入的首值呼叫 update;最後由 summarize 處理全部更新後狀態。
為何正確
輔助函式只使用自己的參數,回傳該規則的結果;solve 按規定順序傳入原值或前一步結果。因此每次函式呼叫都完成其指定工作,組合結果也符合題目。
邊界與注意事項
本題輸入範圍:清單長度 0~12;每個值為 -100~100 的整數。
範例追蹤
依參數順序 values 傳入 [[3,-2,0,5,-2]]。關鍵中間資料為 state = 4;history = [3, 1, 1, 6, 4];first_value = 3;index = 4。最後回傳 [[3, 1, 1, 6, 4], 1]。結果由 return 回傳,不使用 print。
複雜度
設輸入總長度 n;游標或迴圈逐次前進,最壞時間 O(n),保存歷史與回傳結果最壞需要 O(n) 空間。
CodeSprout 官方解答 · 題意分析、解題步驟與完整參考程式
def update(state, x, index, first_value):
return state + x
def summarize(part):
return part.count(part[0]) if part else 0
def solve(values):
state = 0
history = []
first_value = values[0] if values else 0
for (index, x) in enumerate(values):
state = update(state, x, index, first_value)
history.append(state)
return [history, summarize(history)]
留言討論 0
登入 後就能留言,一起討論不同的寫法。