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 栈和队列类型题的更多相关文章

  1. DS博客作业03——栈和队列

    1.本周学习总结 谈谈你对栈和队列结构的认识及学习体会. 栈和队列的本质就是线性表.所以,相应的栈跟队列都有两种存储结构:顺序存储结构.链式存储结构. 栈的特点是后进先出,根据栈时进时出的规则,出栈的 ...

  2. LeetCode刷题 --杂篇 --数组,链表,栈,队列

    武汉加油,中国加油.希望疫情早日结束. 由于疫情,二狗寒假在家不能到处乱逛,索性就在家里系统的刷一下算法的内容,一段时间下来倒也有些小小的收获.只是一来家中的小破笔记本写起博客来实在不是很顺手,二来家 ...

  3. 【leetcode 简单】 第六十六题 用栈实现队列

    使用栈实现队列的下列操作: push(x) -- 将一个元素放入队列的尾部. pop() -- 从队列首部移除元素. peek() -- 返回队列首部的元素. empty() -- 返回队列是否为空. ...

  4. LeetCode 232题用栈实现队列(Implement Queue using Stacks) Java语言求解

    题目链接 https://leetcode-cn.com/problems/implement-queue-using-stacks/ 题目描述 使用栈实现队列的下列操作: push(x) -- 将一 ...

  5. C#LeetCode刷题之#232-用栈实现队列​​​​​​​​​​​​​​(Implement Queue using Stacks)

    问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/4108 访问. 使用栈实现队列的下列操作: push(x) -- ...

  6. leetcode刷题记录——栈和队列

    题目 232.用栈实现队列 class MyQueue { private Stack<Integer> in = new Stack<>(); private Stack&l ...

  7. Leetcode栈&队列

    Leetcode栈&队列 232.用栈实现队列 题干: 思路: 栈是FILO,队列是FIFO,所以如果要用栈实现队列,目的就是要栈实现一个FIFO的特性. 具体实现方法可以理解为,准备两个栈, ...

  8. c++刷题(3/100)数独,栈和队列

    stack的基本操作 • s.size():返回栈中的元素数量 • s.empty():判断栈是否为空,返回true或false • s.push(元素):返回对栈顶部“元素”的可变(可修改)引用 • ...

  9. ACM金牌选手讲解LeetCode算法《栈和队列的高级应用》

    大家好,我是编程熊,双非逆袭选手,字节跳动.旷视科技前员工,ACM金牌,保研985,<ACM金牌选手讲解LeetCode算法系列>作者. 上一篇文章讲解了<线性表>中的数组.链 ...

随机推荐

  1. <基础> PHP 运算符 流程控制

    PHP运算符优先级: 递增/递减 (++ / --) > 算术运算符(+ .- .* ./) > 大小比较 > 逻辑与 (&)> 逻辑或(||) > 三目 > ...

  2. ASP.net 完整登录流程

    登录流程 using System; using System.Collections.Generic; using System.Linq; using System.Web; using Syst ...

  3. gitlab入门

    目录 git下载 注册ssh git客户端及图形化工具tortoisegit下载: git客户端安装: https://git-scm.com/download   (git客户端 此种需要命令行执行 ...

  4. redis异常和注意点

    目录: 1. 修改配置不起作用 2.Connection reset by peer: socket write error 3. redis-cli 查看中文乱码 1. 修改配置不起效果 我们修改了 ...

  5. 使用CLR Function代替T-SQL函数,优化检索效率

    前言: 在使用存储过程查询数据中,T-SQL字符串拆分函数效率低下,这个时候我们可以采用CLR Function代替T-SQL函数,使用DLL执行字符串分解过程,并返回值到SQL中.测试复杂运行的速度 ...

  6. js函数的创建

    1.js 函数的创建有几种方式: 1.1  直接声明 1.2 创建匿名函数,然后赋值 1.3 声明函数,然后赋值给变量 1.4 使用1.3 得到的变量再赋值给变量 1.5 使用函数对象创建函数 < ...

  7. 用python实现一个简单的服务器

    打开命令行工具,输入: python3 -m http.server 8000(端口可以自己定) 通过访问:http://ip:8000/,就能给别人快速分享文件了.

  8. 打包制作 ANE

    一.打包ANE 1.ios 准备文件: anePackager.bat aneswc.swc extension.xml flashAne.ane ioslib.a library.swf platf ...

  9. unity 脚本说明

    MonoBehavour void OnEnable(){ //OnEnable执行在Wake和之前 } void Awake(){ // } void Start(){ } void OnEnabl ...

  10. Servlet之ServletContext获取web上下文路径、全局参数、和Attribute(域)

    1)获取web上下文路径 public void doGet(HttpServletRequest request, HttpServletResponse response) throws Serv ...