官方解答 · 置頂Python
官方解答|樣本雙路分流
官方解答
Python #288:樣本雙路分流
解題規則
實驗站用一個工具判斷樣本去向,另一個工具計算要保存的樣本資訊。
寫 accepts(x,index,values) 判斷該格是否屬於「大於0的值」;transform(x,index,values) 則回傳原清單索引。每格都先形成 [原索引,轉換結果],依條件分別放入符合與不符合清單。回傳 [符合清單,不符合清單],各自保持原順序;兩個分流都要保留,不可丟棄不符合項。
處理步驟
每格先計算 [原索引,轉換結果],再用 accepts 分流;兩邊各自保持原順序。
為何正確
輔助函式只使用自己的參數,回傳該規則的結果;solve 按規定順序傳入原值或前一步結果。因此每次函式呼叫都完成其指定工作,組合結果也符合題目。
邊界與注意事項
本題輸入範圍:清單長度 0~12;每個值為 -100~100 的整數。
範例追蹤
依參數順序 values 傳入 [[3,-2,0,5,-2]]。關鍵中間資料為 accepted = [[0, 0], [3, 3]];refused = [[1, 1], [2, 2], [4, 4]];index = 4;x = -2。最後回傳 [[[0, 0], [3, 3]], [[1, 1], [2, 2], [4, 4]]]。結果由 return 回傳,不使用 print。
複雜度
設輸入總長度 n;游標或迴圈逐次前進,最壞時間 O(n),保存歷史與回傳結果最壞需要 O(n) 空間。
CodeSprout 官方解答 · 題意分析、解題步驟與完整參考程式
def accepts(x, index, values):
return x > 0
def transform(x, index, values):
return index
def solve(values):
accepted = []
refused = []
for (index, x) in enumerate(values):
item = [index, transform(x, index, values)]
if accepts(x, index, values):
accepted.append(item)
else:
refused.append(item)
return [accepted, refused]
留言討論 0
登入 後就能留言,一起討論不同的寫法。