題目描述:
實現支援下列介面的「快照陣列」- snapshotarray:
snapshotarray(int length) - 初始化乙個與指定長度相等的 類陣列 的資料結構。初始時,每個元素都等於 0。
void set(index, val) - 會將指定索引 index 處的元素設定為 val。
int snap() - 獲取該陣列的快照,並返回快照的編號 snap_id(快照號是呼叫 snap() 的總次數減去 1)。
int get(index, snap_id) - 根據指定的 snap_id 選擇快照,並返回該快照指定索引 index 的值。
示例:
輸入:[「snapshotarray」,「set」,「snap」,「set」,「get」]
[[3],[0,5],,[0,6],[0,0]]
輸出:[null,null,0,null,5]
解釋:snapshotarray snapshotarr = new snapshotarray(3); // 初始化乙個長度為 3 的快照陣列
snapshotarr.set(0,5); // 令 array[0] = 5
snapshotarr.snap(); // 獲取快照,返回 snap_id = 0
snapshotarr.set(0,6);
snapshotarr.get(0,0); // 獲取 snap_id = 0 的快照中 array[0] 的值,返回 5
1 <= length <= 50000
題目最多進行50000 次set,snap,和 get的呼叫 。
0 <= index < length
0 <= snap_id < 我們呼叫 snap() 的總次數
0 <= val <= 10^9
方法1:
(1)使用雜湊儲存每輪快照的改變的索引處的值;
(2)每次快照時,儲存當前改變過的值,並將之前的雜湊儲存清零;
(3)get某個快照時的某個索引時,從某個快照開始,向前找都有該索引的快照的值,若都沒有,則返回最初的0;
class
snapshotarray
void
set(
int index,
int val)
intsnap()
intget
(int index,
int snap_id)
--snap_id;
}return0;
//說明沒改變過的}}
;/**
* your snapshotarray object will be instantiated and called as such:
* snapshotarray* obj = new snapshotarray(length);
* obj->set(index,val);
* int param_2 = obj->snap();
* int param_3 = obj->get(index,snap_id);
*/
Leetcode 5149 快照陣列
實現支援下列介面的 快照陣列 snapshotarray 示例 輸入 snapshotarray set snap set get 3 0,5 0,6 0,0 輸出 null,null,0,null,5 解釋 snapshotarray snapshotarr new snapshotarray 3...
PHP二維陣列 按照陣列內某個鍵排序
二維陣列按照某個陣列內的key來排序 題解如下 function array sort arr key sort 0 先迴圈把二維陣列 轉換為一位陣列 foreach arr as item items 轉換成功後 判斷傳過來的排序是0還是1if sort 0 else 最後一步就簡單許多 上面排序...
BZOJ1146 網路管理(主席樹,樹狀陣列)
bzoj許可權題,洛谷題面 樹上帶修改主席樹 貌似和cou nton atre e 那題很相似呀 只需要套上乙個樹狀陣列來維護修改好就好了 但是記住是用df s 來記錄主席樹的標號 一定不要搞錯了 每一次修改只會影響他子數的值 而在d fs序上就是連續的一段 美滋滋的做完了 include incl...