官方解答 · 置頂Python
官方解答|雙站讀值配對
官方解答
Python #157:雙站讀值配對
解題規則
兩個感測站各有一組讀值,請找出符合條件的跨站配對。
用巢狀 for 比較 left 的每一格與 right 的每一格。只保留「兩值相等」的配對,每組輸出 [左索引, 右索引, 兩值乘積]。輸出先按左索引,再按右索引遞增;同值位於不同位置仍是不同配對。
處理步驟
外層逐一讀左索引 i,內層逐一讀右索引 j。以原值判斷配對條件,符合時追加 [i,j,轉換結果];不同位置即使值相同也各別保留。
為何正確
每次迴圈處理原清單中一個位置;加入結果的項目正好是已讀位置中符合條件者。巢狀迴圈按外層索引、內層索引遞增,因此順序與重複位置都保留。
邊界與注意事項
本題輸入範圍:每份長度 0~12;每個值為 -100~100 的整數。 除題目指定的篩選或移除外,保留原資料的重複項與順序;使用切片或明確判斷安全處理允許的空資料。
範例追蹤
依參數順序 left, right 傳入 [[3,-2,0],[3,0,-2]]。關鍵中間資料為 result = [[0, 0, 9], [1, 2, 4], [2, 1, 0]];i = 2;j = 2。最後回傳 [[0, 0, 9], [1, 2, 4], [2, 1, 0]]。結果由 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, left[i] * right[j]])
return result
留言討論 0
登入 後就能留言,一起討論不同的寫法。