一.原题如下:
二.解题思路
使用单调栈(递减),
单调栈存储的是索引,计算下一日更高温度的距离,即为栈顶值和当前索引值的差值;
单调栈需要倒序遍历,并且有一套固定代码模板。
同样使用单调栈代码模板,只是在判断值和推入值时有所区别。
方法描述请看如下:
具体步骤请查看每个关键函数的代码注释
public static int[] monotonicStackHelper(int[] nums) {
// 定义结果数组
int[] res = new int[nums.length];
// 定义栈结构
Stack<Integer> st = new Stack<>();
// 循环操作
for (int i = nums.length - 1; i >= 0; i--) {
// 如果栈不为空并且栈顶索引值值小于等于当前值,则删除栈顶值
// 相当于将前面的矮个子进行剔除
while (!st.isEmpty() && nums[st.peek()] <= nums[i]) {
st.pop();
}
// 赋值结果数组,如果栈为空则赋值0,否则等于栈顶索引 - 当前索引
res[i] = st.isEmpty() ? 0 : st.peek() - i;
// 将当前索引推入到栈
st.push(i);
}
return res;
}
三.完整题解
具体步骤请查看每个关键步骤的代码注释
public static int[] nextGreaterElements(int[] nums) {
return monotonicStackHelper(nums);
}