官方解答|分類狀態日誌
官方解答
Python #369:分類狀態日誌
解題規則
感測紀錄依名稱規則分類,每一組都維護自己的數值狀態與更新日誌。
依原順序讀 records,以「原始 name」作為字典鍵;各鍵有獨立狀態,第一次出現初值0。每筆使用 value 執行「把該筆value絕對值加到狀態」。位置與索引仍以整份 records 計算。每次留下 [分組鍵,更新前狀態,更新後狀態]。回傳 [依輸入順序的歷史,依鍵排序的 [鍵,最終狀態] 清單]。
處理步驟
各鍵初值為 0;每次由 groups 取出該鍵的 before,依整份輸入的原索引更新,寫回並保存歷史。
為何正確
每個鍵值或紀錄都按指定規則處理;篩選、轉換、分組或讀值各自使用規定的來源。排序只作用於題目要求的輸出,原字典與組內紀錄順序保持不變。
邊界與注意事項
本題輸入範圍:最多12筆;name 長度0~20;value 為 -100~100;指定鍵均存在,name 可以重複。 除題目指定的篩選或移除外,保留原資料的重複項與順序;使用切片或明確判斷安全處理允許的空資料。
範例追蹤
依參數順序 records 傳入 [[{"name":"B","value":3,"active":false},{"name":"Ada","value":-2,"active":true},{"name":"B","value":7,"active":true}]]。關鍵中間資料為 groups = {'B': 10, 'Ada': 2};history = [['B', 0, 3], ['Ada', 0, 2], ['B', 3, 10]];values = [3, -2, 7];index = 2。最後回傳 [[['B', 0, 3], ['Ada', 0, 2], ['B', 3, 10]], [['Ada', 2], ['B', 10]]]。結果由 return 回傳,不使用 print。
複雜度
設項目數 n、最大鍵長 L;逐筆處理加上輸出排序最壞時間 O(nL log n),保存分組、歷史和結果最壞需要 O(nL) 空間。
CodeSprout 官方解答 · 題意分析、解題步驟與完整參考程式
def solve(records):
groups = {}
history = []
values = [row['value'] for row in records]
for index, row in enumerate(records):
name, value, active = row['name'], row['value'], row['active']
key = name
before = groups.get(key, 0)
after = before + abs(value)
groups[key] = after
history.append([key, before, after])
return [history, [[key, groups[key]] for key in sorted(groups)]]
留言討論 0
登入 後就能留言,一起討論不同的寫法。