这个题的实质是找到每个数右边第一个比它大的数,就是单调栈问题。思路:
- 遍历数组,让数组的下标入栈,注意栈内只存储下标,且栈内下标表示的温度按降序排列;
- 遍历的同时比较栈顶元素所在位置的温度与当前温度的大小;
- 若当前温度更低则继续将当前下标入栈,否则就是找到了栈顶温度右边第一个比它高的温度,这时弹出栈顶,在结果数组中填入当前温度与栈顶温度的间隔天数。
class Solution {
public:
vector<int> dailyTemperatures(vector<int>& temperatures) {
vector<int> res(temperatures.size(), 0);
stack<int> stk;
for (int i = 0; i < temperatures.size(); ++ i)
{
//栈不为空,且当前温度比栈顶温度高的情况
while (!stk.empty() && temperatures[i] > temperatures[stk.top()])
{
int prev = stk.top();
stk.pop();
res[prev] = i - prev;
}
stk.push(i);
}
return res;
}
};