設計乙個佇列能夠在O 1 取得佇列的最大值

2021-06-07 18:23:23 字數 952 閱讀 8954

//問題:設計乙個佇列能夠在o(1)時間內取得佇列的最大值

#include #include #include //o(1)的速度取出棧中的最大值

templateclass maxstack

else if (value >= max_element_.top())

}//返回棧頂元素

t top()

//出棧

void pop()

data_.pop();

}//判斷是否為空

bool empty()

//取出最大值

t max()

}private:

std::stackdata_;

std::stackmax_element_;

};//o(1)的速度取出佇列中的最大值

templateclass maxqueue

//取隊首元素

t front()

}return pop_stack_.top();

} //出隊操作!!!!

void pop()

}pop_stack_.pop();

} //判空操作!!!!!

bool isempty()

//取出最大值

t max()

else if (push_stack_.empty() && !pop_stack_.empty())

else if (!push_stack_.empty() && pop_stack_.empty())

else

}private:

maxstackpush_stack_;

maxstackpop_stack_;

};//測試用例

int main(int argc, char** argv)

高階篇 設計乙個O(1)的資源池

設計乙個資源池,以下三個操作滿足o 1 複雜度 1 從未分配的資源中分配一塊資源 2 從已分配的資源中釋放指定資源 3 隨機訪問一塊已分配的資源。大致意思是這樣。class resourcepool def init self,cap self.rc i 1 for i in range cap s...

實現乙個 O 1 查詢的 LRU Cache

簡單來說 lru 是記憶體管理的一種演算法,淘汰最近不用的頁。o 1 時間完成查詢,那除了 hash 別無選擇。lru 用雙向鍊錶實現即可。資料結構選擇好了,查詢我們用 hash 通過 key 得到鍊錶節點的位置,然後更新 lru 鍊錶即可。簡單說下自己的專案,乙個類似 memcache 的小型資料...

實現乙個在O 1 內提供min操作的棧

題目 正如本文題目所示,要求實現乙個除了push,pop之外,還提供乙個在o 1 時間內給出堆疊內最小的數值的操作。解析1 對於這個問題,我們可以從堆疊節點儲存的資訊入手。通常堆疊的節點只儲存乙個資料物件,為了能夠在o 1 的時間內找到堆疊內最小的值,我們可以在每個堆疊節點內儲存乙個min值,用於指...