代码随想录算法训练营第四十五天| 739. 每日温度 496.下一个更大元素 I

发布时间 2023-08-03 10:14:02作者: 博二爷

739. 每日温度

单调栈的思路:

如果要找左边第一个比当前数字大的节点

这个栈里面存放的是index,大——》小

如果一个新节点,比栈顶大,那么就是栈顶的第一个大于它的节点

代码:

 1 // 单调栈:一维数组,寻找 元素右边,或者左边自己大或者小的元素的位置
 2 
 3 // 要求:找到比当前节点值高的最近节点距离
 4 // 思路:两层for?
 5 // 
 6 // 思路2:单调栈 —— 如何找到比当前节点大的最新节点
 7 // 注意:栈中存放的是Index
 8 // 先把所有的节点按照顺序,放到从大到小的栈里,然后如果遇到新的数据,比栈顶大,那么就是栈顶的最近大顶数据
 9 //
10 vector<int> dailyTemperatures(vector<int>& temperatures) {
11     vector<int> result(temperatures.size(), 0);
12     if (temperatures.size() == 1) return result;
13 
14     stack<int> stack_;
15     stack_.push(0);
16 
17     for (int i = 1; i < temperatures.size(); i++)
18     {
19         // 小于等于
20         if (temperatures[i] <= temperatures[stack_.top()])
21         {
22             stack_.push(i);
23         }
24         else
25         {
26             //如果当前节点大于,那么应该循环 直到当前节点小于等于顶点
27             while (!stack_.empty() && temperatures[i] > temperatures[stack_.top()])
28             {
29                 result[stack_.top()] = i - stack_.top() ;
30                 stack_.pop();
31             }
32             
33             stack_.push(i);
34         }
35     }
36 
37     return result;
38 }