LeetCode-栈
lettcode里栈分类的题目。
我是一名程序媛
这个作者很懒,什么都没留下…
展开
-
341. 扁平化嵌套列表迭代器
2020-05-241.题目描述扁平化嵌套列表迭代器2.题解使用递归即可3.代码/** * // This is the interface that allows for creating nested lists. * // You should not implement it, or speculate about its implementation * class NestedInteger { * public: * // Return true if t原创 2020-05-24 17:15:21 · 106 阅读 · 0 评论 -
103. 二叉树的锯齿形层次遍历/102. 二叉树的层序遍历
2020-05-241.题目描述二叉树的锯齿形层次遍历2.题解对于层次遍历而言,就是广度优先,由于题目要求奇数层逆序,我们可以1)使用双端队列,奇偶性不同,则出入队列方式不同。2)对于偶数节点,可以将当前层所得的结果逆序。3.代码/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; *原创 2020-05-24 09:19:04 · 161 阅读 · 0 评论 -
84. 柱状图中最大的矩形
2020-05-171.题目描述柱状图中最大的矩形2.题解对于某一个柱子而言,和它一样高的矩形的宽度为找到它两边最近的比它小的柱子,它们之间的距离就是当前的宽,我们需要从左到右、从右到左分别找到比当前柱子最近的最小的,在这里维护一个单调递增的的栈即可。3.代码class Solution {public: int largestRectangleArea(vector<int>& heights) { int l=heights.size();原创 2020-05-17 15:09:58 · 104 阅读 · 0 评论 -
面试题 17.21. 直方图的水量/42. 接雨水
2020-05-161.题目描述直方图的水量2.题解对于某一个柱体而言,它上面的水量等于它左右两边柱体最大值最小值的大小减去当前柱体的高度。3.代码class Solution {public: int trap(vector<int>& height) { int l=height.size(); if (l==0) return 0; vector<int> v1(l,0); vec原创 2020-05-16 19:36:43 · 250 阅读 · 0 评论 -
面试题59 - II. 队列的最大值
2020-05-151.题目描述队列的最大值2.题解这个题目有点像滑动窗口求最大值以及栈的最大值的结合体,我们可以模仿滑动窗口求最大值,开辟一个双端队列来求解最大值。3.代码class MaxQueue {public: MaxQueue() { } int max_value() { if (!myque.empty()) return mydeque.front(); return -1; }原创 2020-05-15 22:03:38 · 137 阅读 · 0 评论 -
150. 逆波兰表达式求值
2020-05-151.题目描述逆波兰表达式求值2.题解直接使用栈即可,需要注意的是参与运算的数的出栈的顺序。3.代码class Solution {public: int evalRPN(vector<string>& tokens) { int l=tokens.size(); if (!l) return 0; stack<int> mystack; int a,b;原创 2020-05-15 14:14:15 · 124 阅读 · 0 评论 -
1019. 链表中的下一个更大节点
2020-05-151.题目描述链表中的下一个更大节点2.题解我是将他转化为数组来求解下一个比它大的数3.代码/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {public: vecto原创 2020-05-15 11:36:43 · 265 阅读 · 0 评论 -
1249. 移除无效的括号
2020-05-151.题目描述移除无效的括号2.题解什么情况下需要删除呢?如果是左括号则入栈,如果是右括号,当前栈中没有左括号就要进行删除,如果有则进行匹配,如果最后栈中还剩下左括号则进行删除。3.代码class Solution {public: string minRemoveToMakeValid(string s) { // 什么时候需要删呢? int l=s.length(); string res="";原创 2020-05-15 11:18:15 · 144 阅读 · 0 评论 -
1003. 检查替换后的词是否有效
2020-05-151.题目描述检查替换后的词是否有效2.题解使用栈即可,如果是 a和b直接入栈,如果是c还要判断能不能有abc,最后再判断栈是否为空即可。3.代码class Solution {public: bool isValid(string S) { int l=S.length(); if (l<3) return false; stack<char> mystack; for (int原创 2020-05-15 11:04:00 · 173 阅读 · 0 评论 -
946. 验证栈序列
2020-05-151.题目描述验证栈序列2.题解这个题目我本科的一位老师在给我们上算法课的时候讲过,他说关键是要明白我们什么时候需要入栈,什么时候需要出栈,题目是要返回pushed数组能不能经过一系列入栈、出栈操作得到popped数组,对于pushed数组中的元素而言,什么时候要入栈呢?如果说popped数组中的元素还没有在pushed数组中找到的话,就需要入栈一直到找到该元素为止,如果找不到,直接返回false,如果栈顶元素等于当前pusheed数组的元素值,则进行出栈操作即可,最后再原创 2020-05-15 10:55:01 · 274 阅读 · 0 评论 -
144. 二叉树的前序遍历
2020-05-131,题目描述 二叉树的前序遍历2.题解可以用递归或者非递归3.代码/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Sol原创 2020-05-13 16:14:44 · 127 阅读 · 0 评论 -
921. 使括号有效的最少添加
2020-05-121,题目描述使括号有效的最少添加2.题解进行括号匹配之后看栈里还剩下几个元素即可。3.代码class Solution {public: int minAddToMakeValid(string S) { int l=S.length(); stack<char> mystack; for (int i=0;i<l;i++){ if (S[i]=='(') mystack.原创 2020-05-12 21:02:12 · 285 阅读 · 0 评论 -
173. 二叉搜索树迭代器/94. 二叉树的中序遍历/145. 二叉树的后序遍历/98. 验证二叉搜索树
2020-05-121.题目描述二叉搜索树迭代器2.题解对于二叉搜索树而言,进行中序遍历就可以得到其有序序列,我们可以先对树进行遍历,将结果保存在vector中,然后进行计算即可。3.代码/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : va原创 2020-05-12 13:45:07 · 161 阅读 · 0 评论 -
1381. 设计一个支持增量操作的栈
2020-05-111.题目描述设计一个支持增量操作的栈2.题解使用vector在进行增量操作的时候会方便一些,vector支持push_back、pop_back、empty操作。3.代码class CustomStack {public: CustomStack(int maxSize) { maxsize=maxSize; len=0; // 初始长度为0 } void push(int x) { if原创 2020-05-11 20:19:51 · 161 阅读 · 0 评论 -
20. 有效的括号
2020-05-111.题目描述括号匹配问题2.题解使用栈即可,需要注意的是最后要判断栈是否为空。3.代码class Solution {public: bool isValid(string s) { int l=s.length(); stack<char>mystack; char c,t; for (int i=0;i<l;i++){ c=s[i];原创 2020-05-11 19:58:42 · 96 阅读 · 0 评论 -
面试题59 - I. 滑动窗口的最大值/239. 滑动窗口最大值
2020-05-111.题目描述滑动窗口的最大值2.题解使用双端队列维护一个递减的队列3.代码class Solution {public: vector<int> maxSlidingWindow(vector<int>& nums, int k) { vector<int> res; int l=nums.size(); if (!l) return res; deq原创 2020-05-11 19:45:10 · 187 阅读 · 0 评论 -
844. 比较含退格的字符串
2020-05-101.题目描述比较含退格的字符串2.题解直接使用栈即可,需要注意的是,如果栈为空且当前元素值为'#',则不做处理即可。3.代码class Solution {public: bool backspaceCompare(string S, string T) { stack<char>s1,s2; int l1=S.size(),l2=T.size(); for (int i=0;i<l1;i++){原创 2020-05-10 19:09:27 · 100 阅读 · 0 评论 -
面试题 03.02. 栈的最小值/面试题30. 包含min函数的栈/155. 最小栈
2020-05-101.题目描述栈的最小值2.题解需要牺牲空间换时间,可以用vector来存储至当前元素的最小值,在push或者pop元素的时候需要更新。3.代码class MinStack {public: /** initialize your data structure here. */ MinStack() { minnow=0x7fffffff; } void push(int x) { mystack.原创 2020-05-10 18:42:52 · 167 阅读 · 0 评论 -
5404. 用栈操作构建数组
2020-05-101.题目描述用栈操作构建数组2.题解我们可以发现,由于元素是按照顺序进行操作的,所以我们直接可以看该元素是否在target数组中,如果在的话,就直接push,不在的话就进行push、pop操作3.代码class Solution {public: vector<string> buildArray(vector<int>& target, int n) { vector<string>res;原创 2020-05-10 18:06:48 · 169 阅读 · 0 评论 -
496. 下一个更大元素 I/503. 下一个更大元素 II/739. 每日温度
2020-05-101.题目描述下一个更大元素2.题解1.直接进行暴力搜索2.既然题目的标签是栈,就应该用到栈先进后出的特性,参考了官方的题解之后,我认为最能体现这种特性的就是要找到下一个比当前元素值大的值。3.代码class Solution {public: vector<int> nextGreaterElement(vector<int>& nums1, vector<int>& nums2) { in原创 2020-05-10 16:37:33 · 127 阅读 · 0 评论 -
225. 用队列实现栈
2020-05-091.题目描述用队列实现栈2.题解使用两个队列,一个用来进行入栈出栈操作,一个用来作为中转。入栈:直接进入到队列1中出栈:如果队列1为空,就把队列2中的所有元素加入进来。然后将队列1中的所有元素加入到队列2中,到最后一个元素的时候,输出即可。3.代码class MyStack {public: /** Initialize your data structure here. */ MyStack() { } /** Pus原创 2020-05-09 14:49:31 · 103 阅读 · 0 评论 -
682. 棒球比赛
2020-05-091.题目描述棒球比赛2.题解在进行"C"操作时,需要从栈顶取出元素。3.代码class Solution {public: int calPoints(vector<string>& ops) { int l=ops.size(); int a=0,b=0,sum; string t; stack<int> mystack; for (int i=0;原创 2020-05-09 13:55:56 · 116 阅读 · 0 评论 -
1047. 删除字符串中的所有相邻重复项
2020-05-081.题目描述 删除字符串中的所有相邻重复项2.题解直接使用栈即可,和栈顶元素相同且栈不为空则出栈,否则入栈,最后输出栈中的元素,使用reverse函数进行反转。3.代码class Solution {public: string removeDuplicates(string S) { stack<char>mystack; int l=S.length(); for (int i=0;i<l;原创 2020-05-08 22:36:56 · 153 阅读 · 0 评论 -
面试题 03.04. 化栈为队/面试题09. 用两个栈实现队列/232. 用栈实现队列
2020-05-081.题目描述用两个栈实现一个队列2.题解将一个栈用来进行入操作,另一个进行出操作,入栈直接入,出栈的时候如果是空的则把另一个栈中的所有元素移动过来,再进行出栈,否则直接出栈即可。3.代码class MyQueue {public: /** Initialize your data structure here. */ MyQueue() { } /** Push element x to the back of queue.原创 2020-05-08 22:14:06 · 107 阅读 · 0 评论 -
1021. 删除最外层的括号
2020-05-081.题目描述删除最外层的括号2.题解题目是要删除最外层的括号,只要弄明白什么时候进行删除即可,用一个计数器来进行判断。3.代码class Solution {public: string removeOuterParentheses(string s) { string res=""; // 删除的是最外层的括号 int cnt=0; // 当cnt=0时是满足条件的括号,此时进行删除原创 2020-05-08 21:19:40 · 92 阅读 · 0 评论