From 733c71d36464b2d6b00b7298b2ef9aebe5fd8ed9 Mon Sep 17 00:00:00 2001 From: Prad Nukala Date: Tue, 6 Oct 2026 12:53:56 -0400 Subject: [PATCH] feat(work): add solution for Next Greater Element I --- .../Easy/Array/496.next-greater-element-i.py | 75 +++++++++++++++++++ 1 file changed, 75 insertions(+) create mode 100644 work/1/Easy/Array/496.next-greater-element-i.py diff --git a/work/1/Easy/Array/496.next-greater-element-i.py b/work/1/Easy/Array/496.next-greater-element-i.py new file mode 100644 index 0000000..d5f52f5 --- /dev/null +++ b/work/1/Easy/Array/496.next-greater-element-i.py @@ -0,0 +1,75 @@ +""" +496. Next Greater Element I +Difficulty: 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 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. + +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. + + + +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? +""" + + +class Solution: + def nextGreaterElement(self, nums1: list[int], nums2: list[int]) -> list[int]: + mono_stack = [] + next_greater = {} + + for cur in nums2: + while mono_stack and cur > mono_stack[-1]: + val = mono_stack.pop() + next_greater[val] = cur + mono_stack.append(cur) + + return [next_greater.get(x, -1) for x in nums1]