739. 每日温度
解法:代码随想录
题目:- LeetCode
单调栈保持了栈内元素单调递增或者递减。
本题运用了单调递增来寻找下一个更大元素。
本题stack存储下标。
class Solution {
public int[] dailyTemperatures(int[] temperatures) {
int[] res = new int[temperatures.length];
Stack<Integer> ms = new Stack();
for (int i = 0; i < temperatures.length; i++) {
while (ms.isEmpty() == false && temperatures[i] > temperatures[ms.peek()]) {
res[ms.peek()] = i - ms.peek();
ms.pop();
}
ms.push(i);
}
return res;
}
}
496.下一个更大元素 I
解法:代码随想录
题目:- LeetCode
思路大体和上一题一致,多了一个hashmap来存储下标,以此来做nums1和nums2的元素对应。
将res[]所有元素在开始时初始化成-1,滞留在栈内的nums1的元素直接默认为-1。
class Solution {
public int[] nextGreaterElement(int[] nums1, int[] nums2) {
HashMap<Integer, Integer> m = new HashMap();
int[] res = new int[nums1.length];
Arrays.fill(res, -1);
for (int i = 0; i < nums1.length; i++) m.put(nums1[i], i);
Stack<Integer> s = new Stack();
for (int i = 0; i < nums2.length; i++) {
while (s.isEmpty() == false && nums2[i] > nums2[s.peek()]) {
int tmp = s.pop();
if (m.containsKey(nums2[tmp])) {
res[m.get(nums2[tmp])] = nums2[i];
}
}
s.push(i);
}
return res;
}
}