Data structure - Stack 小结及leetcode相关题目
2023-10-11 05:26 Johnson_强生仔仔 阅读(17) 评论(0) 编辑 收藏 举报Linear data structure
- Stack
- O(1) for push
- O(1) for pop
- O(1) for top
- Basic skills
先进后出
- [LeetCode] 232. Implement Queue using Stacks_Easy tag: stack
- [LeetCode] 20. Valid Parentheses_Easy tag: Stack
- [LeetCode] 2434. Using a Robot to Print the Lexicographically Smallest String_Medium tag: stack
得到 [0, i] 目前为止subarray nums[:i + 1]的最小值/代表物(TreeNode),每次将num[i] 和目前的最小值组成tuple放到stack里面
- [LeetCode] 155. Min Stack_Easy tag: stack. - 最小值/代表物(TreeNode),每次将num[i] 和目前的最小值组成tuple放到stack里面
- [LeetCode] 654. Maximum Binary Tree_Medium tag: stack - TreeNode,每次将num[i] 组成TreeNode放到stack里面
- [LeetCode] 150. Evaluate Reverse Polish Notation_Medium tag: Stack - res, 每次将当前的res放到stack里面
- [LeetCode] 224. Basic Calculator_Hard tag: stack - res, 每次将当前的res和sign都放进stack里面
- [LeetCode] 895. Maximum Frequency Stack_Hard tag: stack - 利用defaultdict(list), 将每个frequancy的都作为一个stack
strict increasing stack
1) 得到nearest 第一个左边比nums[i]小的,nearest第一个右边比该点小的
2) 当前的index 之前不会有比nums[index] 大的。
考虑以下模板,因为是increase,如果需要强行将所有的num pop,需要将0 或者最小值放进nums
length, 如果不考虑exclusive 比nums[i]小的index,length = right_index - stack[-1] - 1 if stack else right_index
heights.append(0) stack = [] # strict increase stack ans = 0 for index, num in enumerate(heights): while stack and heights[stack[-1]] >= num: pop_index = stack.pop() length = index - stack[-1] - 1 if stack else index ans = max(ans, heights[pop_index] * length) stack.append(index) return ans
适用于模板的leetcode题目有:
- [LeetCode] 84. Largest Rectangle in Histogram_Hard tag: stack 左边和右边第一个比nums[i] 小的,实际上就是中间array的最小值,加上length
-
[LeetCode] 2334. Subarray With Elements Greater Than Varying Threshold_Hard tag: dp, stack 这个题目简直就是84的马甲题,实际上就是中间array的最小值,加上length
-
[LeetCode] 2863. Maximum Length of Semi-Decreasing Subarrays_Medium tag: stack 利用2) property,当前的index之前不会有比nums[index] 大的来得到i
- 得到nearest 第一个左边比nums[i]大的,nearest第一个右边比该点大的 => strict decreasing stack
- [LeetCode] 1944. Number of Visible People in a Queue_Hard tag: stack 逆序,然后距离nums[i]看stack左边在第一个比自己大的num之前有多少个比自己小的
- [LeetCode] 2282. Number of People That Can Be Seen in a Grid_Medium tag: stack. 1944的follow up, 多了duplicates,多加一个equal variable来看是否需要加入第一个比自己大的num
以下有待整理
- [LeetCode] 975. Odd Even Jump_Hard tag: stack, dynamic programming
- 1504. Count Submatrices With All Ones
- (solution里面有很多类似的题目https://leetcode.com/problems/beautiful-towers-ii/solutions/4082819/java-c-python-stack-o-n/ )
- 2289. Steps to Make Array Non-decreasing(solution里面有很多类似的题目https://leetcode.com/problems/steps-to-make-array-non-decreasing/solutions/2085864/java-c-python-stack-dp-explanation-poem/ )
- Next Greater Element I
- Trapping Rain Water
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?