力扣题目:#739. 每日温度
刷题时长:参考题解后15min
解题方法:单调栈
复杂度分析
- 时间复杂度:O(n)
- 空间复杂度:O(n)
问题总结
- 未区分stack.pop和stack.top
- 情况三pop完栈内较小元素后还需把较大元素append进栈
本题收获
- 单调栈题型:通常是一维数组,要寻找任一个元素的右边或者左边第一个比自己大或者小的元素的位置,此时我们就要想到可以用单调栈了。时间复杂度为O(n)。
- 单调栈本质:空间换时间,即用一个栈来记录我们遍历过的元素
- 单调栈解题思路
- 栈内元素:数组元素下标
- 栈头到栈底排序:递增
- 判断条件
- 情况一:当前遍历的元素T[i]小于栈顶元素T[st.top()]的情况
- 情况二:当前遍历的元素T[i]等于栈顶元素T[st.top()]的情况
- 情况三:当前遍历的元素T[i]大于栈顶元素T[st.top()]的情况
力扣题目:# 496.下一个更大元素 I
刷题时长:参考题解后5min
解题方法:单调栈
复杂度分析
- 时间复杂度:O(n)
- 空间复杂度:O(n)
问题总结
- 映射关系应该放在单调栈收获结果的地方
- 单调栈收获结果初需用while循环判断
本题收获
- 单调栈解题思路
- 栈内元素:nums2的元素下标
- 栈头到栈底排序:递增
- 判断条件:同上