The next greater element of some element x in an array is the first greater element that is to the right of x in the same array.
You are given two distinct 0-indexed integer arrays nums1 and nums2, where nums1 is a subset of nums2.
For each 0 <= i < nums1.length, find the index j such that nums1[i] == nums2[j] and determine the next greater element of nums2[j] in nums2. If there is no next greater element, then the answer for this query is -1.
Return an array ans of length nums1.length such that ans[i] is the next greater element as described above.
Input: nums1 = [4,1,2], nums2 = [1,3,4,2]
Output: [-1,3,-1]
Explanation: The next greater element for each value of nums1 is as follows:
- 4 is underlined in nums2 = [1,3,4,2]. There is no next greater element, so the answer is -1.
- 1 is underlined in nums2 = [1,3,4,2]. The next greater element is 3.
- 2 is underlined in nums2 = [1,3,4,2]. There is no next greater element, so the answer is -1.
Input: nums1 = [2,4], nums2 = [1,2,3,4]
Output: [3,-1]
Explanation: The next greater element for each value of nums1 is as follows:
- 2 is underlined in nums2 = [1,2,3,4]. The next greater element is 3.
- 4 is underlined in nums2 = [1,2,3,4]. There is no next greater element, so the answer is -1.
nums1 and nums2 are unique.nums1 also appear in nums2.Follow up: Could you find an O(nums1.length + nums2.length) solution?
The brute force approach is straightforward: For each element in nums1, search for its next greater element in nums2.
nums1, iterate over nums2 to find the index of that element.nums1 and m is the length of nums2. For each element in nums1, we do a potentially full scan of nums2.This approach leverages a stack and hashmap to efficiently find the next greater element for all elements in nums2 in a single pass.
nums2, for each element, pop elements from the stack if the current element is greater because the current element is the "next greater" for those popped elements.nums1, retrieve the next greater element directly from the hashmap.