DAY11 棧與隊(duì)列part02
逆波蘭式求值
1 class Solution { 2 public: 3 int evalRPN(vector<string>& tokens) { 4 stack<long long> st; 5 for(int i=0;i<tokens.size();i++) 6 { 7 8 if(tokens[i]=="+"||tokens[i]=="-"||tokens[i]=="*"||tokens[i]=="/")//雙引號(hào) 9 { 10 long long nums1=st.top(); 11 st.pop(); 12 long long nums2=st.top(); 13 st.pop(); 14 long long res; 15 if(tokens[i]=="+") res=nums1+nums2; 16 if(tokens[i]=="-") res=nums1-nums2; 17 if(tokens[i]=="*") res=nums1*nums2; 18 if(tokens[i]=="/") res=nums2/nums1;//這里注意兩個(gè)數(shù)的順序 19 st.push(res); 20 } 21 else 22 { 23 st.push(stoll(tokens[i]));//表示long long精度轉(zhuǎn)化 24 } 25 } 26 return (int)st.top(); 27 } 28 };

滑動(dòng)窗口最大值
1 class Solution { 2 private: 3 class MYQUE{ 4 deque<int> que; 5 public: 6 void pop(int val) 7 { 8 if(!que.empty()&&que.front()==val) que.pop_front(); 9 } 10 void push(int val) 11 { 12 while(!que.empty()&&val>que.back())//這里不加等號(hào),que里面某些數(shù)需要重復(fù)出現(xiàn),否則窗口滑動(dòng)會(huì)導(dǎo)致僅有的最大值彈出 13 que.pop_back(); 14 que.push_back(val); 15 } 16 int front() 17 { 18 return que.front(); 19 }//要加上不然沒有front對(duì)象 20 }; 21 public: 22 vector<int> maxSlidingWindow(vector<int>& nums, int k) { 23 vector<int> res; 24 MYQUE que;//類的寫法 25 for(int i=0;i<k;i++) 26 { 27 que.push(nums[i]); 28 } 29 res.push_back(que.front()); 30 for(int i=k;i<nums.size();i++) 31 { 32 que.pop(nums[i-k]); 33 que.push(nums[i]); 34 res.push_back(que.front()); 35 } 36 return res; 37 } 38 };
一、deque的簡介
deque是一個(gè)雙向隊(duì)列(double-ended queue),可以在隊(duì)列的兩端進(jìn)行元素的插入和刪除操作。deque的全稱是double-ended queue,翻譯過來就是雙端隊(duì)列,也有人稱之為雙向隊(duì)列,這兩個(gè)名稱都可以表示該數(shù)據(jù)結(jié)構(gòu)。deque是C++STL(標(biāo)準(zhǔn)模板庫)中的一種容器,可以用于存儲(chǔ)各種類型的元素。deque的特點(diǎn)是可以在隊(duì)列的兩端進(jìn)行元素的操作,并且可以高效地在隊(duì)列的任意位置進(jìn)行元素的插入和刪除操作。
可以說deque幾乎涵蓋了queue(隊(duì)列)、stack(堆棧)、vector(向量 )等的全部用法,功能非常的強(qiáng)大。
使用queue時(shí)需要包含頭文件:
#include<deque>
二、deque的常用成員函數(shù)
push_back()//在隊(duì)列的尾部插入元素。 emplace_front()//與push_front()的作用一樣 push_front()//在隊(duì)列的頭部插入元素。 emplace_back()//與push_back()的作用一樣 pop_back()//刪除隊(duì)列尾部的元素。 pop_front()//刪除隊(duì)列頭部的元素。 back()//返回隊(duì)列尾部元素的引用。 front()//返回隊(duì)列頭部元素的引用。 clear()//清空隊(duì)列中的所有元素。 empty()//判斷隊(duì)列是否為空。 size()//返回隊(duì)列中元素的個(gè)數(shù)。 begin()//返回頭位置的迭代器 end()//返回尾+1位置的迭代器 rbegin()//返回逆頭位置的迭代器 rend()//返回逆尾-1位置的迭代器 insert()//在指定位置插入元素 erase()//在指定位置刪除元素

浙公網(wǎng)安備 33010602011771號(hào)