Isaac Emmanuel
15 Jun 2024•EasyC++ / Python / TypeScript

Next Greater Element I

C++, Python and TypeScript solutions for Next Greater Element I.

The Next Greater Element I solutions are below.

Solution files

Python•next-greater-element-i/synced-solution.py
def nextGreaterElement(nums1, nums2):
    next_greater = {}
    stack = []

    for num in reversed(nums2):
        while stack and stack[-1] <= num:
            stack.pop()
        next_greater[num] = stack[-1] if stack else -1
        stack.append(num)

    return [next_greater[num] for num in nums1]
C++•next-greater-element-i/synced-solution.cpp
class Solution {
public:
    vector<int> nextGreaterElement(vector<int>& nums1, vector<int>& nums2) {
        unordered_map<int, int> next_greater;
        stack<int> st;

        for (int i = nums2.size() - 1; i >= 0; i--) {
            while (!st.empty() && st.top() <= nums2[i]) {
                st.pop();
            }
            next_greater[nums2[i]] = st.empty() ? -1 : st.top();
            st.push(nums2[i]);
        }

        vector<int> result;
        for (int num : nums1) {
            result.push_back(next_greater[num]);
        }

        return result;
    }
};
TypeScript•next-greater-element-i/synced-solution.ts
function nextGreaterElement(nums1: number[], nums2: number[]): number[] {
    const nextGreater = new Map<number, number>();
    const stack: number[] = [];

    for (let i = nums2.length - 1; i >= 0; i--) {
        while (stack.length > 0 && stack[stack.length - 1] <= nums2[i]) {
            stack.pop();
        }
        nextGreater.set(nums2[i], stack.length > 0 ? stack[stack.length - 1] : -1);
        stack.push(nums2[i]);
    }

    return nums1.map(num => nextGreater.get(num)!);
}