题目描述:给你两个 没有重复元素 的数组 nums1 和 nums2 ,其中nums1 是 nums2 的子集。
请你找出 nums1 中每个元素在 nums2 中的下一个比其大的值。
nums1 中数字 x 的下一个更大元素是指 x 在 nums2 中对应位置的右边的第一个比 x 大的元素。如果不存在,对应位置输出 -1 。
代码实现
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| class Solution { public int[] nextGreaterElement(int[] nums1, int[] nums2) { Map<Integer, Integer> maps = new HashMap<>(); Stack<Integer> stack = new Stack<>(); for (int i = nums2.length - 1; i >= 0; i--) { while (!stack.isEmpty() && stack.peek() < nums2[i]) { stack.pop(); } Integer nextMaxVal = stack.isEmpty() ? -1 : stack.peek(); maps.put(nums2[i], nextMaxVal); stack.add(nums2[i]); }
int[] res = new int[nums1.length]; for (int i = 0; i < nums1.length; i++) { res[i] = maps.get(nums1[i]); } return res; } }
|