1146 快照陣列

2021-10-18 07:43:23 字數 1588 閱讀 2952

題目描述:

實現支援下列介面的「快照陣列」- 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...