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
nums1is 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
nums1is 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 <= 10000 <= nums1[i], nums2[i] <= 10^4- All integers in
nums1andnums2are unique. - All the integers of
nums1also 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
nums1and 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
skeeps track of elements innums2for 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 thenextGreatermap. - Finally, for each element in
nums1, we look up thenextGreatermap. 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
nums1andnums2, respectively; - Space complexity: \(O(N)\).
Solution 2⚓︎
- Time complexity: \(O(N+M)\), where \(N\) and \(M\) are the lengths of
nums1andnums2, respectively; - Space complexity: \(O(N+M)\).