题目地址:
https://leetcode.com/problems/daily-temperatures/
题目大意是,对于长 n n n数组 A A A中的每个数字,找出右边第一个比它大的数字,记录下标的差最后返回。
单调栈的应用。维护一个单调下降的栈,如果栈空或者栈顶大于等于要push进的数,就将该数push进去,否则该数就是栈顶右边第一个大于栈顶的数,就对其进行记录下标的差值并pop掉,直到栈为空或者栈顶重新大于等于要push的数的时候,就push进这个数。总而言之,是要维护栈的单调性。
class Solution {
public:
vector<int> dailyTemperatures(vector<int>& a) {
int n = a.size();
vector<int> res(n, 0);
stack<int> stk;
for (int i = 0; i < n; i++) {
while (stk.size() && a[stk.top()] < a[i]) {
res[stk.top()] = i - stk.top();
stk.pop();
}
stk.push(i);
}
return res;
}
};
时空复杂度 O ( n ) O(n) O(n)。