【每日刷题】Day99

【每日刷题】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;

}

相关推荐
万法若空14 分钟前
C++ <memory> 库全方位详解
开发语言·c++
黎阳之光15 分钟前
黎阳之光透明管理:视频孪生重构智慧仓储新范式
人工智能·算法·安全·重构·数字孪生
代码中介商18 分钟前
C++ 类型转换深度解析:static_cast、dynamic_cast、const_cast、reinterpret_cast
开发语言·c++
青小莫21 分钟前
C++之string(OJ练习)
开发语言·c++·stl
6Hzlia30 分钟前
【Hot 100 刷题计划】 LeetCode 199. 二叉树的右视图 | C++ DFS 逆序遍历
c++·leetcode·深度优先
-Marks-35 分钟前
【C++编程】STL简介 --- (是什么 | 版本发展历程 | 六大组件 | 重要性缺陷以及如何学习)
开发语言·c++·学习·stl·stl版本
CappuccinoRose1 小时前
回溯法 - 软考备战(四十三)
算法·排列组合·路径·n皇后·子集·解数独·岛屿
AC赳赳老秦1 小时前
OpenClaw进阶技巧:批量修改文件内容、替换关键词,解放双手
java·linux·人工智能·python·算法·测试用例·openclaw
CoderCodingNo2 小时前
【信奥业余科普】C++ 的奇妙之旅 | 12:程序的交互与加工——数据的输入与算术运算
开发语言·c++