官方解答 · 置頂Python
官方解答|訊號累積日誌
官方解答
Python #197:訊號累積日誌
解題規則
記錄器逐筆更新一個數值狀態,遇到指定訊號時停止並交出日誌。
狀態從0開始,以 while 從左往右讀 values。在第一個符合「大於0的值」的格子之前停止;停止格不更新狀態。每個成功讀取的格子會「把狀態改成狀態與原值的較小值」,然後記錄更新後狀態。回傳 [狀態歷史清單, 停止索引];沒有停點時索引是原清單長度。索引一律指原清單位置。
處理步驟
從索引 0 開始,先檢查停止條件;未停止才更新 state、保存狀態,再推進游標。
為何正確
每次迴圈開始時,游標指向下一個尚未處理的位置,state 表示已處理資料的狀態。停止條件放在題目要求的更新前或更新後,游標與歷史就能正確區分已讀和未讀資料。
邊界與注意事項
本題輸入範圍:清單長度 0~12;每個值為 -100~100 的整數。 除題目指定的篩選或移除外,保留原資料的重複項與順序;使用切片或明確判斷安全處理允許的空資料。
範例追蹤
依參數順序 values 傳入 [[3,-2,0,5,-2]]。關鍵中間資料為 state = 0;history = [];index = 0。最後回傳 [[], 0]。結果由 return 回傳,不使用 print。
複雜度
設輸入總長度 n;游標或迴圈逐次前進,最壞時間 O(n),保存歷史與回傳結果最壞需要 O(n) 空間。
CodeSprout 官方解答 · 題意分析、解題步驟與完整參考程式
def solve(values):
state = 0
history = []
index = 0
while index < len(values):
if values[index] > 0:
break
state = min(state, values[index])
history.append(state)
index += 1
return [history, index]
留言討論 0
登入 後就能留言,一起討論不同的寫法。