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 }