leetcode 栈和队列类型题
1,Valid Parentheses
bool isVaild1(string& s) { // 直接列举,不易扩展
stack<char> stk;
for (int i = ; i < s.length(); ++i) {
if (stk.empty())
stk.push(s[i]);
else {
char top = stk.top();
if (top == '(' && s[i] == ')' || top == '{' && s[i] == '}' || top == '[' && s[i] == ']')
stk.pop();
}
}
if (stk.empty())
return true;
else
return false;
}
bool isValid2(string& s) {
string left = "([{";
string right = ")]}";
stack<char> stk;
for (auto c = s.begin(); c != s.end(); ++c) {
if (left.find(*c) != string::npos)
stk.push(*c);
else {
if (stk.empty() || stk.top() != left[right.find(*c)])
return false;
else
stk.pop();
}
}
return stk.empty();
}
isVaild
2,Longest Valid Parentheses
int longestValidParentheses(const string& s) {
int len = ;
stack<char> stk;
for (size_t i = ; i < s.size(); ++i) {
if (stk.empty())
stk.push(s[i]);
else {
if (stk.top() == '(' && s[i] == ')') {
stk.pop();
++len;
}
else
stk.push(s[i]);
}
}
return * len;
}
longestValidParentheses
3,Largest Rectangle in Histogram
int longestRectangleArea1(vector<int>& heights) { // 暴力求解
if (heights.size() == ) return ;
int result = ;
for (int i = ; i < heights.size(); ++i) {
int minHeight = heights[i];
if (i == heights.size() - || heights[i]>heights[i + ]) { // 简单优化
for (int j = i; j >= ; --j) {
minHeight = min(minHeight,heights[j]);
result = max((i - j + )*minHeight, result);
}
}
}
return result;
}
int longestRectangleArea2(vector<int>& heights) { // 用 stack实现,未看懂
stack<int> s;
heights.push_back();
int result = ;
for (int i = ; i < heights.size();) {
if (s.empty() || heights[i] > heights[s.top()])
s.push(i++);
else {
int temp = s.top();
s.pop();
result = max(result, heights[temp] * (s.empty() ? i : i - s.top() - ));
}
}
return result;
}
longestRectangleArea
4,Evaluate Reverse Polish Notation
int evalRPN(vector<string>& tokens) {
stack<int> stk;
string options = "+-*/";
for (int i = ; i < tokens.size(); ++i) {
if (options.find(tokens[i]) == string::npos) // 不是运算符
stk.push(atoi(tokens[i].c_str()));
else {
int num1 = stk.top();
stk.pop();
int num2 = stk.top();
stk.pop();
if (tokens[i] == "+") stk.push(num1 + num2);
else if (tokens[i] == "-") stk.push(num1 - num2);
else if (tokens[i] == "*") stk.push(num1 * num2);
else stk.push(num1 / num2);
}
}
return stk.top();
}
evalRPN
以上题目来源于:https://github.com/soulmachine/leetcode(leetcode-cpp.pdf)
leetcode 栈和队列类型题的更多相关文章
- DS博客作业03——栈和队列
1.本周学习总结 谈谈你对栈和队列结构的认识及学习体会. 栈和队列的本质就是线性表.所以,相应的栈跟队列都有两种存储结构:顺序存储结构.链式存储结构. 栈的特点是后进先出,根据栈时进时出的规则,出栈的 ...
- LeetCode刷题 --杂篇 --数组,链表,栈,队列
武汉加油,中国加油.希望疫情早日结束. 由于疫情,二狗寒假在家不能到处乱逛,索性就在家里系统的刷一下算法的内容,一段时间下来倒也有些小小的收获.只是一来家中的小破笔记本写起博客来实在不是很顺手,二来家 ...
- 【leetcode 简单】 第六十六题 用栈实现队列
使用栈实现队列的下列操作: push(x) -- 将一个元素放入队列的尾部. pop() -- 从队列首部移除元素. peek() -- 返回队列首部的元素. empty() -- 返回队列是否为空. ...
- LeetCode 232题用栈实现队列(Implement Queue using Stacks) Java语言求解
题目链接 https://leetcode-cn.com/problems/implement-queue-using-stacks/ 题目描述 使用栈实现队列的下列操作: push(x) -- 将一 ...
- C#LeetCode刷题之#232-用栈实现队列(Implement Queue using Stacks)
问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/4108 访问. 使用栈实现队列的下列操作: push(x) -- ...
- leetcode刷题记录——栈和队列
题目 232.用栈实现队列 class MyQueue { private Stack<Integer> in = new Stack<>(); private Stack&l ...
- Leetcode栈&队列
Leetcode栈&队列 232.用栈实现队列 题干: 思路: 栈是FILO,队列是FIFO,所以如果要用栈实现队列,目的就是要栈实现一个FIFO的特性. 具体实现方法可以理解为,准备两个栈, ...
- c++刷题(3/100)数独,栈和队列
stack的基本操作 • s.size():返回栈中的元素数量 • s.empty():判断栈是否为空,返回true或false • s.push(元素):返回对栈顶部“元素”的可变(可修改)引用 • ...
- ACM金牌选手讲解LeetCode算法《栈和队列的高级应用》
大家好,我是编程熊,双非逆袭选手,字节跳动.旷视科技前员工,ACM金牌,保研985,<ACM金牌选手讲解LeetCode算法系列>作者. 上一篇文章讲解了<线性表>中的数组.链 ...
随机推荐
- GPUImage中亮度调整的实现——GPUImageBrightnessFilter
亮度brightness其实是对RGB的调整,RGB值越大,效果越亮:反之则越暗. GPUImage中提供了对图像亮度调整的Filter,其核心代码如下(fragment): varying high ...
- Android xml 绘制图形
一般用shape定义的xml文件存放在drawable目录下,若项目没有该目录则新建一个,而不要将它放到drawable-hdpi等目录中. 使用shape可以自定义形状,可以定义下面四种类型的形状, ...
- docker tomcat镜像制作
推荐使用dockerfile(本文直接拉取tomcat需要进入容器自行安装vim):docker利用Dockerfile来制作镜像 1.查找Docker Hub上的tomcat镜像 [root@loc ...
- C#的配置文件App.config使用总结
应用程序配置文件是标准的 XML 文件,XML 标记和属性是区分大小写的.它是可以按需要更改的,开发人员可以使用配置文件来更改设置,而不必重编译应用程序.配置文件的根节点是configuration. ...
- 机器学习进阶-图像形态学操作-梯度运算 cv2.GRADIENT(梯度运算-膨胀图像-腐蚀后的图像)
1.op = cv2.GRADIENT 用于梯度运算-膨胀图像-腐蚀后的图像 梯度运算:表示的是将膨胀以后的图像 - 腐蚀后的图像,获得了最终的边缘轮廓 代码: 第一步:读取pie图片 第二步:进行腐 ...
- gevent mysql
使用gevent实现mysql并发时,每个greenlet应该独享一个mysql连接,否则,不同的greenlet之间会相互影响. ultramysql doesn't allow you to ma ...
- 命名空间与use
以下是自己读PHP手册命名空间这一节的一些笔记,还有自己上机做命名空间测试的一些整理,原创博客,有错欢迎指正: 1.命名空间声明必须是第一条语句,若没有声明命名空间的脚本,则被认为是全局空间的脚本.若 ...
- UNITY2018开启deepprofiling
ADB方式调试游戏步骤 前提: 1,手机开启 [开发者模式][USB调试] 2,数据线连接手机和电脑 3,安装adb(注意adb版本不对可能导致adb deveices找不到设备,那就换个adb版本) ...
- 剑指offer例题——跳台阶、变态跳台阶
题目:一只青蛙一次可以跳上1级台阶,也可以跳上2级.求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果). 思路: n<=0时,有0种跳法 n=1时,只有一种跳法 n=2时,有 ...
- Java基本语法知识要点
0x00 一个源文件中有多少个类,在用javac编译后,在同一目录下将产生多少个对应的字节码文件(.class ).类里面不一定要有public static void main(String[] ...