题目:栈 —(简单)— 下一个更大元素 I
思路:
由于数组nums1是nums2的子集,所以如果找出数组nums2中所有的数的更大的数,那么nums1的自然也就有了。
额外利用一个map集合和一个栈stack,map来存储nums2中元素以及比其更大的元素的映射。stack用来存储暂时找不到比自己更大的元素的元素。通过遍历nums2,将nums2中的元素依次入栈,但在每次入栈之前,若栈stack非空且该元素大于栈顶元素,那么该元素就是比栈顶元素下一个更大的元素,将他们存入map集合中,并将栈顶元素弹出。否则直接将其入栈。
代码:
class Solution {
public int[] nextGreaterElement(int[] nums1, int[] nums2) {
int[] result = new int[nums1.length];
Map<Integer, Integer> map = new HashMap<>();
Stack<Integer> stack = new Stack<>();
for (int num : nums2) {
while (!stack.empty() && stack.peek() < num) {
map.put(stack.pop(), num);
}
stack.push(num);
}
for (int i = 0; i < nums1.length; i++) {
result[i] = map.getOrDefault(nums1[i], -1);
}
return result;
}
}