import java.util.Stack;
class Solution {
public int[] dailyTemperatures(int[] temperatures) {
//默认初始值为0
int[] array = new int[temperatures.length];
//维护一个始终栈顶元素最小的序列
Stack<StackElement> stack = new Stack<>();
for(int i=0;i<temperatures.length-1;i++){
StackElement stackElement = new StackElement();
stackElement.index = i;
stackElement.val = temperatures[i];
stack.push(stackElement);
int top = stack.peek().val;
int next = temperatures[i+1];
//栈顶元素与next比较,若next大于栈顶元素,则找到了下一个更大的元素
//直到next小于栈顶元素或栈为空
while (!stack.empty()&&top<next){
stackElement = stack.pop();
array[stackElement.index]=i+1-stackElement.index;
if(!stack.empty()){
top = stack.peek().val;
}
}
}
return array;
}
}
/**
* 自定义数据结构
* index 记录元素在原数组的下标
* val 记录元素的值
*/
class StackElement{
int index;
int val;
}