Leetcode 0496. Next Greater Element I
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`.
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]
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.
Example 2:
Input: nums1 = [2,4], nums2 = [1,2,3,4] Output: [3,-1]
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.
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
.
Follow up:
- Could you find an O(nums1.length + nums2.length) solution?
Solution
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class Solution:
# Iteration
# Time Complexity: BigO(N^2)
# Space Complexity: BigO(N)
def nextGreaterElement(self, nums1: List[int], nums2: List[int]) -> List[int]:
stack = []
dict = {}
res = []
for i in nums2:
while len(stack) > 0 and i > stack[-1]:
dict[stack.pop()] = i
stack.append(i)
for i in nums1:
res.append(dict.get(i, -1))
return res
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
/**
* Iteration
* Time Complexity: BigO(N^2)
* Space Complexity: BigO(N)
*/
function nextGreaterElement(nums1: number[], nums2: number[]): number[] {
let res: number[] = [];
nums1.forEach((num1) => {
let idx = nums2.indexOf(num1);
for (let j = idx + 1; j < nums2.length; j++) {
if (nums2[j] > num1) {
res.push(nums2[j]);
return;
}
}
res.push(-1);
});
return res;
}
This post is licensed under CC BY 4.0 by the author.