简介
如果用暴力岂不是太不优雅了. 有些问题可以使用单调栈来进行计算.
简单思想
构建一个栈, 栈是一个有顺序的, 里面有一个while循环,然后 如果满足一定的条件, 将会一直弹出.
code
class Solution {
public:
vector<int> dailyTemperatures(vector<int>& T) {
stack<int> s;
vector<int> res(T.size(), 0);
int len = T.size();
for(int i=0; i<len; i++){
while(!s.empty() && T[s.top()] < T[i]){
res[s.top()] = i - s.top();
s.pop();
}
s.push(i);
}
return res;
}
};
class Solution {
public int[] dailyTemperatures(int[] T) {
Deque<Integer> stack = new ArrayDeque<>();
int [] res = new int[T.length];
for(int i = 0; i<T.length; i++){
while(!stack.isEmpty() && T[stack.peek()] < T[i]){
int idx = stack.pop();
res[idx] = i - idx;
}
stack.push(i);
}
return res;
}
}
---------------------------我的天空里没有太阳,总是黑夜,但并不暗,因为有东西代替了太阳。虽然没有太阳那么明亮,但对我来说已经足够。凭借着这份光,我便能把黑夜当成白天。我从来就没有太阳,所以不怕失去。
--------《白夜行》