n个数,要求插入,查找最大最小值,删除最大最小值的时间复杂度都限制在O(log2n),应该用什么算法和数据结构?
人生最曼妙的风景,竟是内心的淡定与从容!
樓上兩個答案的出發點不同。
平衡二元樹可以做到,但是原始序列會被排序。 在C++中,set 和 map 都可以滿足要求。
而線段樹可以求區間最大值或最小值,不需要重新排序。 沒有現成的資料結構可用,你可以自己寫個範本。
使用平衡二元樹
你們怎麼用平衡二元樹呢,雖然可行;但如果只是最大最小值,那隻需要使用一個heap,在C++中有現成資料結構,是STL中的priority_queue。
heap
priority_queue
線段樹可解 ...
用C++ STL裡的set
set
樓上兩個答案的出發點不同。
平衡二元樹可以做到,但是原始序列會被排序。
在C++中,set 和 map 都可以滿足要求。
而線段樹可以求區間最大值或最小值,不需要重新排序。
沒有現成的資料結構可用,你可以自己寫個範本。
使用平衡二元樹
你們怎麼用平衡二元樹呢,雖然可行;但如果只是最大最小值,那隻需要使用一個
heap
,在C++中有現成資料結構,是STL中的priority_queue
。線段樹可解 ...
用C++ STL裡的
set