CodeSprout程式萌芽
困難第 169 題 · 雙站讀值配對
CodeSprout 官方2026/10/04 00:19
官方解答 · 置頂Python

官方解答|雙站讀值配對

官方解答

Python #169:雙站讀值配對

解題規則

兩個感測站各有一組讀值,請找出符合條件的跨站配對。

用巢狀 for 比較 left 的每一格與 right 的每一格。只保留「兩值相等」的配對,每組輸出 [左索引, 右索引, 左索引減右索引]。輸出先按左索引,再按右索引遞增;同值位於不同位置仍是不同配對。

處理步驟

外層逐一讀左索引 i,內層逐一讀右索引 j。以原值判斷配對條件,符合時追加 [i,j,轉換結果];不同位置即使值相同也各別保留。

為何正確

每次迴圈處理原清單中一個位置;加入結果的項目正好是已讀位置中符合條件者。巢狀迴圈按外層索引、內層索引遞增,因此順序與重複位置都保留。

邊界與注意事項

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

範例追蹤

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

複雜度

設左右清單長度為 n、m;每個數值配對只做固定次數運算,時間 O(nm),結果空間最壞 O(nm)。

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

def solve(left, right):
    result = []
    for i in range(len(left)):
        for j in range(len(right)):
            if left[i] == right[j]:
                result.append([i, j, i - j])
    return result

留言討論 0