設計一種結構, 在該結構中有如下三個功能:
insert(key): 將某個key加入到該結構, 做到不重複加入。
delete(key): 將原本在結構中的某個key移除。
getrandom():等概率隨機返回結構中的任何乙個key。
【要求】 insert、 delete和getrandom方法的時間複雜度都是o(1)
解:使用兩個hash表進行操作,
map1中存放的 key value 分別是 相應的值 和對應的插入順序
map2中正好相反, key value 分別是 對應的插入順序,和 相應的值
insert(key):即是上面的操作方法
getrandom():就是利用size,使用math.random() * size產生乙個隨機數,範圍就是[0, size )的乙個值,然後從map2中獲取相應的數字對應的值即可
delete(key):需要注意的是,如果直接在map1和map2中進行刪除操作的話,會產生很多空缺的地方,此時,如果getrandom()的話,產生的隨機數的位置很可能是空的,這樣就不能保證o(1)的時間複雜度
正確的做法是:(將最後乙個覆蓋到相應的刪除位置)若刪除的是其中位置x處的值,則把map1中倒數第乙個value賦為刪除處的value(即為插入元素的次序),把map2中應該刪除的次序的位置的value也賦成倒數第乙個的值
並且刪除對應位置上的值
public class randompoolpublic void insert(string str)
}public string getrandom()
int randomindex = (int) (math.random() * size);
system.out.println(randomindex);
return indexkeymap.get(randomindex);
}public void delete(string str)
}public void printkeyindexmap()
}public void printindexkeymap()
}public static void main(string args)
}
設計RandomPool結構
題目 請設計randompool結構,使其具有以下三個功能 將某個key加入到該結構,做到不重複加入 將原本在結構中的某個key移除。等概率隨機返回結構中的任意乙個key 要求 以上三個方法的時間複雜度是o 1 的 分析 第乙個方法要求不重複加入以及要求中的時間複雜度為o 1 使得我們聯想到了雜湊表...
其他題目 設計RandomPool結構
題目 設計一種結構,在該結構中有如下三個功能 1 insert key 將某個key加入到該結構,做到不重複加入 2 delete key 將原本在結構中的某個key移除 3 getrandom 等概率隨機返回結構中的任意乙個key 要求所有的操作時間複雜度都是o 1 基本思路 對每個元素都加上乙個...
RandomPool結構設計(C )
題目 設計一種結構,在該結構中有如下三個功能 insert key 將某個key加入到該結構,做到不重複加入。delete key 將原本在結構中的某個key移除。getrandom 等概率隨機返回結構中的任何乙個key。要求 insert delete和getrandom方法的時間複雜度都是o 1...