CodeSprout程式萌芽
中等第 193 題 · 反向訊號日誌
CodeSprout 官方2026/10/04 00:19
官方解答 · 置頂Python

官方解答|反向訊號日誌

官方解答

Python #193:反向訊號日誌

解題規則

記錄員從最後一筆訊號向前檢視,請保存原位置與更新後狀態。

使用 while 從 values 的最後一格向左移動。遇到第一個符合「大於0的值」的格子就停止且不處理該格。狀態從0開始,每格「把原值平方加到狀態」。依實際由右往左的處理順序記錄 [原索引,更新後狀態]。回傳 [紀錄清單,停止索引];全部讀完或原清單為空,停止索引為-1。所有相鄰比較與首次/末次出現仍以原清單判斷。

處理步驟

游標由最後一格往左移;判斷仍使用原清單,未停止才記錄 [原索引, 新狀態]。讀完後游標為 -1。

為何正確

每次迴圈開始時,游標指向下一個尚未處理的位置,state 表示已處理資料的狀態。停止條件放在題目要求的更新前或更新後,游標與歷史就能正確區分已讀和未讀資料。

邊界與注意事項

本題輸入範圍:清單長度 0~12;每個值為 -100~100 的整數。 除題目指定的篩選或移除外,保留原資料的重複項與順序;使用切片或明確判斷安全處理允許的空資料。

範例追蹤

依參數順序 values 傳入 [[3,-2,0,5,-2]]。關鍵中間資料為 state = 4;history = [[4, 4]];index = 3。最後回傳 [[[4, 4]], 3]。結果由 return 回傳,不使用 print。

複雜度

設輸入總長度 n;游標或迴圈逐次前進,最壞時間 O(n),保存歷史與回傳結果最壞需要 O(n) 空間。

CodeSprout 官方解答 · 題意分析、解題步驟與完整參考程式

def solve(values):
    state = 0
    history = []
    index = len(values) - 1
    while index >= 0:
        if values[index] > 0:
            break
        state = state + values[index] * values[index]
        history.append([index, state])
        index -= 1
    return [history, index]

留言討論 0