漫畫演算法筆記 最小棧
漫畫演算法筆記
最小棧
#include <iostream>
#include <stdlib.h>
#include <algorithm>
#include <vector>
#include <stack>
using namespace std;
template<typename T>
class MinStack
{
public:
//入棧
void push(T element)
{
_mainStack.push(element);
//如果輔助棧為空,或者新元素小於或等於輔助棧棧頂,則將新元素壓入輔助棧
if ( _minStack.empty() || element <= _minStack.top() )
{
_minStack.push(element);
}
}
//出棧
T pop()
{
//如果出棧元素和輔助棧棧頂元素值相等,輔助棧出棧
if ( _mainStack.top() == _minStack.top() )
{
_minStack.pop();
}
T tmp = _mainStack.top();
_mainStack.pop();
return tmp;
}
//獲取棧的最小元素
T getMin()
{
if ( _minStack.empty() )
{
throw exception("stack is empty");
}
return _minStack.top();
}
private:
stack<T> _mainStack;
stack<T> _minStack;
};
int main(int argc, char** argv)
{
MinStack<int> myStack;
myStack.push(4);
myStack.push(9);
myStack.push(7);
myStack.push(3);
myStack.push(8);
myStack.push(5);
cout << myStack.getMin() << endl; //3
myStack.pop();
myStack.pop();
myStack.pop();
cout << myStack.getMin() << endl; //4
system("pause");
return 0;
}
相關文章
- 漫畫演算法:最小棧的實現演算法
- 演算法:最小棧的實現演算法
- 《深入react技術棧》學習筆記(三)漫談ReactReact筆記
- 齊姐漫畫:排序演算法(一)排序演算法
- 漫畫:什麼是LRU演算法?演算法
- 腐漫網,腐女漫畫網,漫畫網站網站
- 漫畫:三種 “奇葩” 的排序演算法排序演算法
- 漫畫演算法:什麼是 B 樹?演算法
- Leetcode 演算法題解系列 - 最小棧LeetCode演算法
- 漫畫演算法:什麼是跳躍表?演算法
- 演算法筆記04--分治法之尋找最大最小元素演算法筆記
- 155. 最小棧
- 漫畫演算法:如何判斷連結串列有環?演算法
- 漫畫演算法:輾轉相除法是什麼鬼?演算法
- 棧的學習筆記筆記
- 【漫畫講技術】CSS系列漫畫教程(6-10講)CSS
- 【漫畫講技術】CSS系列漫畫教程(11-15講)CSS
- 動漫&漫畫&音樂&小說 免費
- 漫畫|面試風暴面試
- 看漫畫,學 WebAssemblyWeb
- 漫畫區塊鏈區塊鏈
- 閱讀筆記——架構漫談筆記架構
- 《JavaScript資料結構與演算法》筆記——第3章 棧JavaScript資料結構演算法筆記
- 資料結構與演算法分析學習筆記(四) 棧資料結構演算法筆記
- 最小生成樹學習筆記筆記
- LeetCode-最小棧LeetCode
- 靈魂畫手:漫畫圖解 SSH圖解
- 資料結構筆記——棧資料結構筆記
- 極客漫畫:Windows 更新Windows
- 漫畫:面向 API 開發API
- 極客漫畫:Bash on WindowsWindows
- 漫畫:什麼是機器學習機器學習
- 漫畫講解HDFS原理
- Git - XKCD 漫畫註解Git
- 前端漫長的全棧之路前端全棧
- 【JavaScript學習筆記】畫圖JavaScript筆記
- JVM學習筆記之棧區JVM筆記
- CUDA 學習筆記之程式棧筆記