739. 每日温度 - 力扣(LeetCode)
class Solution {
public int[] dailyTemperatures(int[] temperatures) {
int[] result = new int[temperatures.length];
Deque<Integer> monoStack = new LinkedList<Integer>();
for(int i=0;i<temperatures.length;i++){
if(monoStack.isEmpty()){
monoStack.push(i);
continue;
}
if(temperatures[i] <= temperatures[monoStack.peek()]){
monoStack.push(i);
}else{
while (!monoStack.isEmpty() && temperatures[i] > temperatures[monoStack.peek()]){
Integer pop = monoStack.pop();
result[pop] = i-pop;
}
monoStack.push(i);
}
}
return result;
}
}
496. 下一个更大元素 I - 力扣(LeetCode)
class Solution {
public int[] nextGreaterElement(int[] nums1, int[] nums2) {
int[] temp = new int[nums2.length];
Arrays.fill(temp,-1);
Deque<Integer> monoStack = new LinkedList<>();
HashMap<Integer,Integer> nums2Map = new HashMap<>();
for(int i=0;i<nums2.length;i++){
nums2Map.put(nums2[i],i);
if(monoStack.isEmpty()){
monoStack.push(i);
continue;
}
if(nums2[i] <= nums2[monoStack.peek()]){
monoStack.push(i);
}else{
while (!monoStack.isEmpty() && nums2[i] > nums2[monoStack.peek()]){
Integer pop = monoStack.pop();
temp[pop] = nums2[i];
}
monoStack.push(i);
}
}
int[] result = new int[nums1.length];
for(int i=0;i<nums1.length;i++){
Integer index = nums2Map.get(nums1[i]);
result[i] = temp[index];
}
return result;
}
}
503. 下一个更大元素 II - 力扣(LeetCode)
class Solution {
public int[] nextGreaterElements(int[] nums) {
int[] nums2 = new int[nums.length*2];
for(int i=0;i<nums.length;i++){
nums2[i] = nums[i];
nums2[i+nums.length] = nums[i];
}
int[] temp = new int[nums.length*2];
Arrays.fill(temp,-1);
Deque<Integer> monoStack = new LinkedList<>();
for(int i=0;i<nums2.length;i++){
if(monoStack.isEmpty()){
monoStack.push(i);
continue;
}
if(nums2[i] < nums2[monoStack.peek()]){
monoStack.push(i);
}else{
while (!monoStack.isEmpty() && nums2[i] > nums2[monoStack.peek()]){
Integer pop = monoStack.pop();
temp[pop] = nums2[i];
}
monoStack.push(i);
}
}
int[] result = new int[nums.length];
for(int i=0;i<nums.length;i++){
result[i] = temp[i];
}
return result;
}
}