CodeSprout程式萌芽
中等第 213 題 · 雙站同步檢視
CodeSprout 官方2026/10/04 00:19
官方解答 · 置頂Python

官方解答|雙站同步檢視

官方解答

Python #213:雙站同步檢視

解題規則

兩個感測站的讀值依同一位置同步檢視,請在指定配對出現時停止。

用同一游標從索引0同步讀 left、right。只在兩邊都還有資料時繼續;若目前配對符合「兩值同為奇數或同為偶數」就立刻停止,停止配對不算已讀。回傳 [停止前的原值配對清單, 左邊尚未讀取的清單, 右邊尚未讀取的清單]。

處理步驟

游標同時讀左右清單。只有兩邊都有資料且當前配對尚未符合停止條件,才記錄原值配對並推進;最後按同一游標回傳兩邊剩餘區段。

為何正確

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

邊界與注意事項

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

範例追蹤

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

複雜度

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

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

def solve(left, right):
    i = 0
    history = []
    while i < len(left) and i < len(right):
        if left[i] % 2 == right[i] % 2:
            break
        history.append([left[i], right[i]])
        i += 1
    return [history, left[i:], right[i:]]

留言討論 0