官方解答|樣本快照盒
官方解答
Python #458:樣本快照盒
解題規則
樣本盒連續更新目前的樣本清單,請分別保存不受後續更新影響的快照。
ListSession 複製輸入清單保存為 values。先執行「將目前清單反向」,再針對更新後清單執行「將目前清單再複製一份接在尾端」。每步完成後都保存一份新的清單副本到 history,避免後一步改動前一步快照。回傳這兩個快照組成的清單。
處理步驟
初始化時複製輸入,兩個 edit 依序操作當時的 values;每次另用 list(values) 保存快照,避免後續改動影響之前結果。
為何正確
物件屬性保存當前狀態;負責更新的方法依當時屬性完成一次更新與必要的快照,讀值步驟只讀取目前屬性。初始化及逐次更新維持題目指定的狀態,因此最後回傳的資料符合指定摘要。
邊界與注意事項
本題輸入範圍:長度0~12,每個數為 -100~100。物件須自行複製輸入清單,不修改呼叫者的原始清單。 除題目指定的篩選或移除外,保留原資料的重複項與順序;使用切片或明確判斷安全處理允許的空資料。 需要清單快照時另外複製,兩個物件的清單與計數彼此獨立。
範例追蹤
依參數順序 values 傳入 [[3,-2,0,5,-2]]。關鍵中間資料為 box = {'values': [-2, 5, 0, -2, 3, -2, 5, 0, -2, 3], 'history': [[-2, 5, 0, -2, 3], [-2, 5, 0, -2, 3, -2, 5, 0, -2, 3]]}。最後回傳 [[-2, 5, 0, -2, 3], [-2, 5, 0, -2, 3, -2, 5, 0, -2, 3]]。結果由 return 回傳,不使用 print。
複雜度
設輸入及必要輸出的總大小為 n;複製、轉換或掃描最壞時間 O(n),保存中間資料與回傳結果最壞需要 O(n) 空間。
CodeSprout 官方解答 · 題意分析、解題步驟與完整參考程式
class ListSession:
def __init__(self, values):
self.values = list(values)
self.history = []
def first_edit(self):
self.values = self.values[::-1]
self.history.append(list(self.values))
def second_edit(self):
self.values = self.values + self.values
self.history.append(list(self.values))
def report(self):
return [list(values) for values in self.history]
def solve(values):
box = ListSession(values)
box.first_edit()
box.second_edit()
return box.report()
留言討論 0
登入 後就能留言,一起討論不同的寫法。