单调栈与单调队列

视频讲解

单调栈

  1. 上一个更大(小)的元素
  2. 下一个更大(小)的元素

每日温度

题意就是查找下一个更大的数
单调栈与单调队列_第1张图片
我们从右到左遍历,当遍历完6 3 2 5后,对于元素2进行分析:下标在元素2之前的数,有两种情况:1. 比2大,那2不可能是它的答案,因为要找的是下一个更大的数。2. 比2小,但由于5这个元素在2的前面,并且5大于2,所以2不可能作为答案。综上,2作为当前的元素应该被“去除”,元素3也是同理,再也不用去遍历他们。

单调栈与单调队列_第2张图片
可以把下一个更大的数存到栈里(右到左),栈里面的元素可能是下一个更大的数。

class Solution {
   
public:
    vector<int> dailyTemperatures(vector<int>& temperatures) {
   
        int n = temperatures.size();
        stack <int> s;
        vector <int> res(n);
        
        for(int i = n - 1;i >= 0;i --){
   
            while(!s.empty() && temperatures[i] >= temperatures

你可能感兴趣的:(算法,算法)