【每日刷题】Day99
🥕个人主页:开敲🍉
🔥所属专栏:每日刷题🍍
🌼文章目录🌼
[1. 逆波兰表达式求值_牛客题霸_牛客网 (nowcoder.com)](#1. 逆波兰表达式求值_牛客题霸_牛客网 (nowcoder.com))
[2. 点击消除_牛客题霸_牛客网 (nowcoder.com)](#2. 点击消除_牛客题霸_牛客网 (nowcoder.com))
[3. 【模板】循环队列_牛客题霸_牛客网 (nowcoder.com)](#3. 【模板】循环队列_牛客题霸_牛客网 (nowcoder.com))
1. 逆波兰表达式求值_牛客题霸_牛客网 (nowcoder.com)
//思路:栈+遍历。
//遍历tokens,因为tokens中只包含算术运算符字符串或数字字符串,因此我们遍历时判断是否为+、-、*、/ 这四个运算符,如果不是则将数字插入栈;如果是,因为算术运算符是二元运算符,因此可以断定在遇到算术运算符之前栈中一定有两个数字,我们将两个数字获取并运算(获取两个数字时采用 获取栈顶元素--删除栈顶元素--获取栈顶元素--删除栈顶元素的 方式),将算好后的数字插入栈,此时栈中只有一个数字,继续往后遍历下一个数字,重复上述过程。
class Solution {
public:
int evalRPN(vector<string>& tokens)
{
int ans = 0;
vector<int> v1;
int ret1 = 0;
int ret2 = 0;
for(int i = 0;i<tokens.size();i++)
{
//判断是否遍历到的为4个运算符
if(tokens[i]=="*")
{
//获取栈顶数字
ret1 = v1.back();
//删除栈顶数字
v1.pop_back();
//获取栈顶数字
ret2 = v1.back();
//删除栈顶数字
v1.pop_back();
//将运算后的数字插入栈,此时栈中只有一个数字,继续遍历下一个数字
v1.push_back(ret2*ret1);
}
else if(tokens[i]=="+")
{
ret1 = v1.back();
v1.pop_back();
ret2 = v1.back();
v1.pop_back();
v1.push_back(ret2+ret1);
}
else if(tokens[i]=="-")
{
ret1 = v1.back();
v1.pop_back();
ret2 = v1.back();
v1.pop_back();
v1.push_back(ret2-ret1);
}
else if(tokens[i]=="/")
{
ret1 = v1.back();
v1.pop_back();
ret2 = v1.back();
v1.pop_back();
v1.push_back(ret2/ret1);
}
//如果不是则将数字插入栈
else
v1.push_back(stoi(tokens[i]));
}
return v1[0];
}
};
2. 点击消除_牛客题霸_牛客网 (nowcoder.com)
//思路:栈+遍历。
//遍历字符串s: 如果栈为空或者s[i]!=栈顶元素,则直接将s[i]入栈;否则,则删除栈顶元素
#include <iostream>
#include <vector>
using namespace std;
int main()
{
string s;
getline(cin,s);
string ans;
for(int i = 0;i<s.size();i++)
{
if(ans.empty()||s[i]!=ans.back())
ans.push_back(s[i]);
else
ans.pop_back();
}
if(ans.empty())
cout<<0<<endl;
else
cout<<ans<<endl;
return 0;
}
3. 【模板】循环队列_牛客题霸_牛客网 (nowcoder.com)
//思路:利用库中的队列实现循环队列。
#include <iostream>
#include <queue>
#include <string>
using namespace std;
class Cyclequeue
{
public:
Cyclequeue(size_t capacity)
{
_capacity = capacity;
}
void push(int x)
{
if(_size==_capacity)
cout<<"full"<<endl;
else
{
q1.push(x);
_size++;
}
}
void pop()
{
if(_size==0)
cout<<"empty"<<endl;
else
{
_size--;
int ret = q1.front();
q1.pop();
cout<<ret<<endl;
}
}
void front()
{
if(_size==0)
cout<<"empty"<<endl;
else
cout<<q1.front()<<endl;
}
private:
queue<int> q1;
size_t _capacity = 0;
size_t _size = 0;
};
int main()
{
int capacity = 0;
int num = 0;
cin>>capacity>>num;
Cyclequeue c1(capacity);
while(num--)
{
int data = 0;
string s;
cin>>s;
if(s=="push")
{
cin>>data;
c1.push(data);
}
if(s=="front")
c1.front();
if(s=="pop")
c1.pop();
}
return 0;
}