CodeSprout程式萌芽
簡單第 184 題 · 訊號停點搜尋
CodeSprout 官方2026/10/04 00:19
官方解答 · 置頂Python

官方解答|訊號停點搜尋

官方解答

Python #184:訊號停點搜尋

解題規則

記錄器從第一筆訊號往後讀,遇到指定停點就停止掃描。

從索引0開始,用 while 由左往右讀 values。遇到第一個符合「大於0的值」的格子時立刻停止,不把停止格算入已讀資料。若沒有停點就讀完。回傳[停止前讀過的前段清單, 從停止格開始的剩餘清單]。

處理步驟

index 從 0 開始;遇到第一個符合條件的位置就停止,不把該位置算入已讀區段。最後用 index 分割已讀和剩餘資料;找不到停點時 index 等於原長度。

為何正確

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

邊界與注意事項

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

範例追蹤

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

複雜度

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

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

def solve(values):
    index = 0
    while index < len(values):
        if values[index] > 0:
            break
        index += 1
    return [values[:index], values[index:]]

留言討論 0