Next Greater Element I⚓︎
Description⚓︎
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.
Example 1:
- 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.
- 4 is underlined in
Example 2:
- 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.
- 2 is underlined in
Constraints:
1 <= nums1.length <= nums2.length <= 1000
0 <= nums1[i], nums2[i] <= 10^4
- All integers in
nums1
andnums2
are unique. - All the integers of
nums1
also appear innums2
.
Solution⚓︎
Solution 1⚓︎
- Use a decreasing monotonic stack to find the next greater element for each element in
nums2
. - Store these mappings (element to its next greater element) in a hash map.
- Iterate through
nums1
and use the hash map to find the next greater element for each number. If it doesn't exist in the hash map, it means there is no next greater element, so we use -1.
- The stack
s
keeps track of elements innums2
for which we are yet to find the next greater element. - When iterating through
nums2
, if we find an element greater than the element on the top of the stack, it means we've found the next greater element for the stack's top element. We record this in thenextGreater
map. - Finally, for each element in
nums1
, we look up thenextGreater
map. If an entry exists, we add it to the result; otherwise, we add -1.
Complexity:
- Time complexity: \(O(N+M)\), where \(N\) and \(M\) are the lengths of
nums1
andnums2
, respectively; - Space complexity: \(O(N)\).
Solution 2⚓︎
- Time complexity: \(O(N+M)\), where \(N\) and \(M\) are the lengths of
nums1
andnums2
, respectively; - Space complexity: \(O(N+M)\).