数据结构-栈
数据结构-栈
tzyshiwolaogongya
这个作者很懒,什么都没留下…
展开
-
leetcode1047——Remove All Adjacent Duplicates In String
题目大意:一次遍历,删除字符串中所有的相邻重复字符,比如abbaca->ca分析:用字符串实现栈。遍历字符串,如果当前字符和栈顶相同就弹栈,否则入栈。代码:class Solution {public: string removeDuplicates(string S) { string ans; for (int i = 0;i < S.size();i++) { if (ans.size() &&原创 2020-08-02 09:57:21 · 196 阅读 · 0 评论 -
leetcode402——Remove K Digits
题目大意:字符串num代表一个非负整数,删除其中k位使得数字变得最小,输出不能出现前导零和空串。分析:单调栈+贪心。贪心策略:从左往右删,如果左邻居>当前位,就应该删掉左邻居,这样才能使数字变最小。栈:遍历字符串,当前位小于栈顶元素时弹栈,否则入栈。可以直接用字符串来实现这个单调栈。注意:1.可能遍历结束时还没删够k位,需要直接删掉末尾几位,也就是直接截取字符串的前size-k位。2.可能删除导致出现了前导零,比如10200,因此要删掉前导零再返回。3.当k>=size,会删除所有数字,此时原创 2020-07-31 20:37:08 · 214 阅读 · 0 评论 -
leetcode150——Evaluate Reverse Polish Notation
题目大意:根据逆波兰表达式法,求表达式的值分析:栈。token为数字时入栈,token为运算符时弹出两个栈顶元素,运算后入栈。注意题目给的string,string转int用stoi(str)。代码:class Solution {public: int evalRPN(vector<string>& tokens) { stack<int> s; for (string token : tokens) {原创 2020-07-05 22:04:02 · 153 阅读 · 0 评论 -
leetcode739——Daily Temperatures
题目大意:给出每日气温数组,求出每天之后等待几天,气温会升高分析:栈。用栈记录遍历的索引,遍历时只要当前元素大于栈顶索引所指气温值,说明栈顶元素的答案找到了,记录答案并弹栈,循环直到栈顶索引所指气温值不小于当前遍历气温,然后压入当前索引即可。代码:class Solution {public: vector<int> dailyTemperatures(vect...原创 2020-04-06 10:01:06 · 142 阅读 · 0 评论 -
leetcode394——Decode String
题目大意:将字符串按规则解码,k[str]的编码规则为k个str相连,例如3[ab2[c]2[a]],解码后为abccaaabccaaabccaa分析:栈。这道题重点在于需要识别嵌套的[],所以需要用栈。遍历字符串,维护当前的k和str:当前字符为数字时,更新k=k*10 + 当前字符值;当前字符为字母时,更新str=str + 当前字符;当前字符为'['时,将<k,str&...原创 2020-03-23 10:43:35 · 123 阅读 · 0 评论 -
leetcode145——Binary Tree Postorder Traversal
题目大意:用迭代法返回二叉树的逆序遍历代码:/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), ri...原创 2020-03-01 10:10:23 · 110 阅读 · 0 评论 -
leetcode94——Binary Tree Inorder Traversal
题目大意:中序遍历二叉树分析:栈的应用,考察二叉树的中序遍历。代码:/*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode(int x) : val(x), left(NULL), right(N...原创 2018-06-18 17:18:07 · 119 阅读 · 0 评论 -
leetcode144——Binary Tree Preorder Traversal
题目大意:返回二叉树的前序遍历分析:递归/迭代。迭代:利用栈,初始时root进栈,开始循环,当栈非空时弹出栈顶元素,访问它,并依次压入右节点和左节点。这样就能做到先访问该节点,然后访问它的左节点,然后访问它的右节点,符合前序遍历。代码:方法一:递归class Solution {public: vector<int> preorderTraversal(...原创 2020-02-29 10:13:29 · 112 阅读 · 0 评论 -
leetcode587——Erect The Fence
题目大意:求点的凸包分析:Graham Scan首先将所有点按Y-X排序,选出bm(y最小的点),再按对bm的极角排序,极角相同按与bm的距离排序。我们还需要考虑另一种重要的情况,如果共线的点在凸壳的最后一条边上,我们需要从距离初始点最远的点开始考虑起。所以,在将数组排序后,我们从尾开始遍历有序数组并将共线且朝有序数组尾部的点反转顺序,因为这些点是形成凸壳过程中尾部的点,所以在经过了这...原创 2019-10-17 16:47:17 · 127 阅读 · 0 评论 -
leetcode155——Min Stack
题目大意:设计一个能在常数时间内检索到最小元素的栈分析:两种方法。方法一:使用pair<min,value>,只要在进栈时让min维护着当前栈中的最小值即可。方法二:使用辅助栈,同步维护当前栈的最小值。当进栈元素小于辅助栈栈顶时,辅助栈压入进栈元素,否则仍然压入辅助栈栈顶元素。代码:class MinStack { stack<pair<int...原创 2020-03-05 10:20:14 · 115 阅读 · 0 评论 -
leetcode84——Largest Rectangle in Histogram
题目大意:给出一个非负数整数数组,每个数代表直方图中的一个矩形的高度,问直方图中最大矩形面积是多少分析:栈的考察。这道题暴力求解针对每个小矩形左右搜索时间复杂度太高O(n²)。用栈就可以O(n)内解决。 栈储存矩形的索引下标。从头开始遍历数组,当前索引所指的数字大于等于栈顶索引所指的数字时,将当前索引入栈,并继续判断下一索引。如果当前索引所指数字小于栈顶索引所指数字,就意味...原创 2018-06-01 21:21:35 · 148 阅读 · 0 评论 -
leetcode85——Maximal Rectangle
题目大意:给出由字符0或1组成的二维矩阵,求出其中最大的矩形面积,矩形由1构成分析:栈的考察。和上一道题leetcode84类似,我们可以将二维矩阵从每一行切割开来,切割行以上被看作一个柱状图,用上一题中的解法就可以求出该柱状图中的最大矩形面积,总共有matrix.size()个柱状图。代码:class Solution {private: void createHistogram(const v...原创 2018-06-02 13:59:23 · 154 阅读 · 0 评论 -
leetcode71——Simplify Path
题目大意:给出一个Unix的文件路径,简化它("/a/./b/../../c/", =>"/c")分析:栈的应用。由于../表示返回上级目录,所以需要用栈来记录,必要时弹出栈顶。路径有几点需要特殊处理: 1.栈中不保存任何/,遇到多个连续的/时跳过不处理即可 2.遇到../的情况:返回上级目录,所以需要弹出栈顶元素(当栈非空时),栈空说明已经到了根目录...原创 2018-05-14 13:51:48 · 147 阅读 · 0 评论 -
leetcode20——Valid Parentheses
题目大意:匹配括号,查看给出的字符串中的括号是否是合法匹配的,()[]{}分析:栈的应用。代码:首次代码:if-else的结构来判定#include <stack>class Solution {public: bool isValid(string s) { stack<char> par; for (int ...原创 2018-04-09 20:21:38 · 117 阅读 · 0 评论 -
leetcode332——Reconstruct Itinerary
题目大意:给出一些旅行票的出发地和目的地对,求出一个行程规划,使得用完所有的票分析:map和stack应用。用map存储出发地和目的地的匹配对,由于同一个起始地可能对应很多目的地,所以map的第二个设为multiset。用stack记录路径,将from压入栈中,找出它对应map中的目的地,如果非空则将目的地压入栈中,如果目的地为空则意味着到了一个终点,将from弹栈,放入结果点集中。由于首先查...原创 2018-03-22 16:08:55 · 283 阅读 · 0 评论