单调栈
- 单调栈应用场景:找当前元素左边/右边比当前元素大/小的第一个元素
- 什么是单调栈:保证栈里面的元素递增/递减(需要自己定义)
- 栈内保存什么:存入下标
- 如何比较大小:栈和数组做映射
- 递增?递减?:取决于应用场景
- 递增:求当前元素左边/右边比他大的第一个元素
- 递减:求当前元素左边/右边比他小的第一个元素
- 单调栈的作用:记录存放遍历过的元素,存放的同时进行排序
739. 每日温度
- 不需要倒序遍历,正序遍历,存入
- 注意栈内存入的是元素下标而不是元素的值
- 当前元素比栈口大,则弹出栈口元素,记录该元素结果;循环该过程直到栈为空
- 当前元素比栈口小,则压入元素,不记录
- 最后遍历结束,但是栈内的元素没有找到比其更大的,则赋零
496.下一个更大元素①
-
可以在上一题的基础上做
-
对于两个没有重复元素的数组(一个为另一个子集),可以用map来做映射
-
unordered_map<int, int> umap; //key,下标元素;value,下标 for(int i = 0; i<nums1.size(); i++) umap[nums1[i]] = i; //使用 if(umap.count(nums2[st.top()]) > 0){ //查看map中是否存在这个元素 int index = umap[nums2[st.top()]]; //查询该元素对应的下标 result[index] = nums2[i]; }