单调栈:
下一个更大元素。
题目意思如图所示:
单调栈图解:
class Solution {
public int[] nextGreaterElement(int[] nums1, int[] nums2) {
Stack<Integer>stack=new Stack<>();
int res[]=new int[nums2.length];
int ans[]=new int[nums1.length];
//从后往前寻找某一元素的下一个比它大的元素。只要看栈顶元素即可。这是一个单调栈
for(int i=nums2.length-1;i>=0;i--)
{
while(!stack.isEmpty()&&nums2[i]>=stack.peek())
{
stack.pop();
}
res[i]=stack.isEmpty()?-1:stack.peek();
stack.push(nums2[i]);
}
for(int i=0;i<nums1.length;i++)
{
for(int j=0;j<nums2.length;j++)
{
if(nums1[i]==nums2[j])
{
ans[i]=res[j];
break;
}
}
}
return ans;
}
}
每日温度:
class Solution {
public int[] dailyTemperatures(int[] temperatures) {
Stack<Integer>stack=new Stack<>();
int res[]=new int[temperatures.length];
int ans[]=new int[temperatures.length];
for(int i=temperatures.length-1;i>=0;i--)
{
while(!stack.isEmpty()&&temperatures[i]>=temperatures[stack.peek()])
{
stack.pop();
}
res[i]=stack.isEmpty()?0:stack.peek();
stack.push(i);
}
for(int i=0;i<temperatures.length;i++)
{
ans[i]=(res[i]-i)>0?res[i]-i:0;
}
return ans;
}
}