目录
删除字符串中的所有相邻重复项
stack<char> ans;
for(char S:s)
{
//空或不等
if(!ans.empty()||S!=ans.top()) ans.push(S);
else{
ans.pop();
}
}
//倒叙
string str="";
while(!ans.empty())
{
str+=ans.top();
ans.pop();
}
reverse(str.begin(),str.end());
return str;
逆波兰表达式求值
stack<long long> ans;
for(int i=0;i<tokens.size();i++)
{
//运算符
if(tokens[i]=="+"||tokens[i]=="-"||tokens[i]=="*"||tokens[i]=="/")
{
long long num1=ans.top();
ans.pop();
long long num2=ans.top();
ans.pop();
if(tokens[i]=="+") ans.push(num2+num1);
if(tokens[i]=="-") ans.push(num2-num1);
if(tokens[i]=="*") ans.push(num2*num1);
if(tokens[i]=="/") ans.push(num2/num1);
}
//数字
else
{
ans.push(stoll(tokens[i]));
}
}
int ans_num=ans.top();
ans.pop();
cout<<ans_num<<endl;
滑动窗口最大值
class MyQue
{
public:
deque<int> que;//用deque来实现这个单调队列
void pop(int x)//弹出操作,要实现当队首最大元素是要弹出的元素的时候,执行操作,当弹出的元素不是最大的时候,其实当时就已经被弹出了
{
if(!que.empty()&&que.front()==x){
que.pop_front();
}
}
void push(int x)//用这个来实现加入数据并弹出比当前元素小的前面的元素,直到队列为空为止
{
while(!que.empty()&&que.back()<x){
que.pop_back();//弹出小元素
}
que.push_back(x);//加入当前元素
}
int front(){
return que.front();
}
};
class Solution {
public:
vector<int> maxSlidingWindow(vector<int>& nums, int k) {
//实现上面设计的队列
MyQue que;
vector<int> ans;
for(int i=0;i<k;i++)
{
que.push(nums[i]);
}
ans.push_back(que.front());
for(int i=k;i<nums.size();i++)
{
que.pop(nums[i-k]);
que.push(nums[i]);
ans.push_back(que.front());
}
return ans;
}
};