给你两个 没有重复元素 的数组 nums1 和 nums2 ,其中nums1 是 nums2 的子集。请你找出 nums1 中每个元素在 nums2 中的下一个比其大的值。nums1 中数字 x 的下一个更大元素是指 x 在 nums2 中对应位置的右边的第一个比 x 大的元素。如果不存在,对应位置输出 -1 。
思路:利用栈的特性,把每个元素都进行入栈处理,入栈前判断如果栈中元素比其他,则安排栈中元素出栈,这样只需要O(M+N)即可完成题目
代码如下
public static int[] nextGreaterElement(int[] nums1, int[] nums2) {
int len1 = nums1.length;
int len2 = nums2.length;
int[] result = new int[len1];
Stack<Integer> stack = new Stack<>();
HashMap<Integer, Integer> hashMap = new HashMap<>();
//遍历nums2,将每个元素都排入栈中,记录下他后面第一个比他大的数字
for (int i = 0; i < len2; i++) {
while (!stack.empty() && stack.peek() < nums2[i]) {
hashMap.put(stack.peek(), nums2[i]);
stack.pop();
}
stack.push(nums2[i]);
}
//如果哈希表中不存在,则证明没有比他大的数字
for (int i = 0; i < len1; i++) {
result[i] = hashMap.getOrDefault(nums1[i], -1);
}
return result;
}
此处评论已关闭