日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

面试金典--min栈的实现

發(fā)布時(shí)間:2025/3/15 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 面试金典--min栈的实现 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

題目描述:實(shí)現(xiàn)一個(gè)包含min操作的棧,時(shí)間復(fù)雜度需要是O(1)

思路:一開始的想法是添加輔助棧保存當(dāng)前最小元素,但是這樣存在的問題就是不能處理重復(fù)元素;于是.....我還是google了,找到如下錦囊妙計(jì)

不需要額外的空間,棧頂保存的是最小元素,每次push比較,如果當(dāng)前元素更小的話就更新棧頂,另外棧頂以下元素保存的是元素push的時(shí)候與

當(dāng)時(shí)的最小值的差值;pop的時(shí)候,就是看棧頂元素后的下一個(gè)元素,如果小于零,說明當(dāng)前需要pop最小元素,同時(shí)更新最小元素,如果大于零,

直接push(最小元素+差值)即可。有點(diǎn)混亂:

看例子:

3 5 2 1

push:

3

2 3

2 -1 2

2 -1 -1 1

pop:

2 -1 2 輸出1

2 3 輸出2

3 輸出5

輸出3

1 #include <iostream> 2 #include <queue> 3 #include <climits> 4 #include <algorithm> 5 #include <memory.h> 6 #include <stdio.h> 7 #include <ostream> 8 #include <vector> 9 #include <list> 10 #include <cmath> 11 #include <string> 12 #include <stdexcept> 13 #include <stack> 14 using namespace std; 15 16 template<typename T> 17 class minStack 18 { 19 public: 20 T pop(); 21 void push(const T& elem); 22 T min(); 23 stack<T> s; 24 }; 25 template<typename T> 26 void minStack<T>::push(const T&elem) 27 { 28 if(s.empty()) 29 { 30 s.push(elem); 31 return; 32 } 33 T minval = s.top(); 34 s.pop(); 35 s.push(elem-minval); 36 if(elem < minval) 37 { 38 s.push(elem); 39 } 40 else 41 s.push(minval); 42 return; 43 } 44 45 template<typename T> 46 T minStack<T>::pop() 47 { 48 if(s.empty()) 49 throw std::out_of_range("stack is empty"); 50 T minval = s.top(); 51 s.pop(); 52 T val = s.top(); 53 s.pop(); 54 if(val <= 0) 55 { 56 s.push(minval - val); 57 val = minval; 58 } 59 else 60 { 61 s.push(minval); 62 val = minval+val; 63 } 64 return val; 65 } 66 67 int main() 68 { 69 return 0; 70 }

?

?

轉(zhuǎn)載于:https://www.cnblogs.com/cane/p/3793510.html

總結(jié)

以上是生活随笔為你收集整理的面试金典--min栈的实现的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。