思路分析:
- 创建一个结果数组,用于存储每天需要等待多少天才能遇到更高的温度。
- 使用栈来记录数组索引,栈中的索引对应的温度是递减的,即栈顶元素对应的温度最小。
- 遍历输入数组,对每个元素进行处理。
- 如果当前温度高于栈顶索引对应的温度,说明找到了更高的温度,计算等待天数并存储在结果数组中。然后继续弹出栈顶元素,直到栈为空或者栈顶元素对应的温度大于当前温度。最后将当前索引入栈。
- 如果当前温度小于等于栈顶索引对应的温度,将当前索引入栈,继续下一个元素的处理。
- 最终返回结果数组。
class Solution {
public:
vector<int> dailyTemperatures(vector<int>& temperatures) {
// 获取输入数组的长度
int len = temperatures.size();
// 用于存储每天需要等待多少天才能遇到更高的温度
vector<int> result(len);
// 使用栈来记录数组索引,栈中的索引对应的温度是递减的
stack<int> A;
// 将第一个元素的索引入栈
A.push(0);
// 遍历数组
for (int i = 1; i < len;) {
// 如果当前温度高于栈顶索引对应的温度
if (temperatures[i] > temperatures[A.top()]) {
// 计算栈顶索引对应的等待天数,并将其存储在结果数组中
result[A.top()] = i - A.top();
// 弹出栈顶元素,继续检查新的栈顶元素是否小于当前温度
A.pop();
// 如果栈为空,说明当前温度是最高的,将当前索引入栈
if (A.empty())
A.push(i);
} else {
// 如果当前温度小于等于栈顶索引对应的温度,将当前索引入栈
A.push(i);
i++;
}
}
// 返回最终的结果数组
return result;
}
};