Day58|单调栈part01:739. 每日温度、496. 下一个最大元素

每日温度
leetcode链接:力扣题目链接
视频链接:单调栈,你该了解的,这里都讲了!LeetCode:739.每日温度、
给定一个整数数组 temperatures ,表示每天的温度,
返回一个数组 answer ,其中 answer[i] 是指对于第 i 天,
下一个更高温度出现在几天后。如果气温在这之后都不会升高,
请在该位置用 0 来代替。

示例 1:

输入: temperatures = [73,74,75,71,69,72,76,73]
输出: [1,1,4,2,1,1,0,0]
示例 2:

输入: temperatures = [30,40,50,60]
输出: [1,1,1,0]
示例 3:

输入: temperatures = [30,60,90]
输出: [1,1,0]

首先看暴力解法,两重循环,最后超时了:
class Solution {
public:
vector dailyTemperatures(vector& temperatures) {
vector res(temperatures.size(), 0);
for(int i = 0; i < temperatures.size(); i++){
for(int j = i + 1; j < temperatures.size();j++){
if(temperatures[j] > temperatures[i]){
res[i] = j - i;
break;
}
}
}
return res;
}
};
单调栈解法
单调栈的作用:对于一维数组,可以 方便的找到右边第一个比他大/小的元素是什么。
单调栈就是一个栈,里面存放下标。
遍历顺序:从栈顶到栈口的顺序,递增或者递减。
如果是递增,求得就是第一个比它大的元素的位置;
如果是递减,求得就是第一个比它小的元素的位置;

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