496. Next Greater Element I (Easy) (https://leetcode.com/problems/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. Return an array of length nums1.length such that ans[i] is the next greater element as described above. Constraints: - 1 <= nums1.length <= nums2.length <= 1000 - 0 <= nums1[i], nums2[i] <= 10^4 - All integers in nums1 and nums2 are unique.
- All the integers of nums1 also appear in nums2. Follow up: Could you find an O(nums1.length + nums2.length) solution?
function nextGreaterElement(nums1: number[], nums2: number[]): number[] {
const stack: number[] = []; // LIFO; хранит числа, ещё не нашедшие next greater
const nextGreaters: Record<number, number> = {}; // где ключ — число из nums2, значение — его next greater element
for (let i = 0; i < nums2.length; i++) {
const curr = nums2[i];
// При новом числе — пока оно больше вершины стека, выталкивай вершину и записывай в map map[вершина] = новое_число
while (curr > stack[stack.length - 1] && stack.length > 0) {
nextGreaters[stack.pop()!] = curr;
}
stack.push(curr);
}
const result = [];
for (let i = 0; i < nums1.length; i++) {
result.push(nextGreaters[nums1[i]] ?? -1);
}
return result;
}
// Local check:
console.log(nextGreaterElement([4, 1, 2], [1, 3, 4, 2])); // [-1,3,-1]
console.log(nextGreaterElement([2, 4], [1, 2, 3, 4])); // [3,-1]Example 1:
Input: nums1 = [4,1,2], nums2 = [1,3,4,2]
Output: [-1,3,-1]
Explanation:
4 is in nums2 = [1,3,4,2]. There is no next greater element, so the answer is -1.
1 is in nums2 = [1,3,4,2]. The next greater element is 3.
2 is 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]
Explanation:
2 is in nums2 = [1,2,3,4]. The next greater element is 3.
4 is in nums2 = [1,2,3,4]. There is no next greater element, so the answer is -1.