思路:
用单调栈的方法
单调栈就是为所存储的数据单调递增或者单调递减的栈,作用是线性记录已经遍历过的数据,方便将正在遍历的数据和原有的比较
- 栈为空时将遍历元素的下标存入数组中
- 栈不为空则将正在遍历的数据和栈顶元素比较
- 如果小于等于栈顶元素则继续入栈
- 如果大于栈顶元素则说明找到了温度更高天数,此时将该元素的下标减去栈顶元素则得到历经多久才遇到更高温度的天数
// 版本一
class Solution {
public:
vector<int> dailyTemperatures(vector<int>& T) {
// 递减栈
stack<int> st;
vector<int> result(T.size(), 0);
st.push(0);
for (int i = 1; i < T.size(); i++) {
if (T[i] < T[st.top()]) { // 情况一
st.push(i);
} else if (T[i] == T[st.top()]) { // 情况二
st.push(i);
} else {
while (!st.empty() && T[i] > T[st.top()]) { // 情况三
result[st.top()] = i - st.top();
st.pop();
}
st.push(i);
}
}
return result;
}
};