//問題:設計乙個佇列能夠在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值,用於指...