法1:单调栈
class Solution {
public int[] nextGreaterElement(int[] nums1, int[] nums2) {
Map<Integer, Integer> map = new HashMap<>();
Stack<Integer> stack = new Stack<>();
for (int i = nums2.length - 1; i >= 0; --i) {
while (!stack.isEmpty() && nums2[i] >= stack.peek()) {
stack.pop();
}
map.put(nums2[i], stack.isEmpty() ? -1 : stack.peek());
stack.push(nums2[i]);
}
int[] res = new int[nums1.length];
for (int i = 0; i < nums1.length; ++i) {
res[i] = map.get(nums1[i]);
}
return res;
}
}
法2:迭代
最简单的方法,必须掌握!!!O(MN)
class Solution {
public int[] nextGreaterElement(int[] nums1, int[] nums2) {
int[] res = new int[nums1.length];
Arrays.fill(res, -1);
for (int i = 0; i < nums1.length; ++i) {
int val = nums1[i];
int nextBig = -1;
for (int k = nums2.length - 1; k >= 0; --k) {
if (nums2[k] == val) {
break;
}
if (nums2[k] > val) {
res[i] = nums2[k];
}
}
}
return res;
}
}