15 Jun 2024C++ / Python / TypeScriptEasy

Next Greater Element I

Collected C++, Python, TypeScript solutions for next greater element i. Add a dedicated write-up later if you want deeper notes.

auto-generated entry for Next Greater Element I. the solution files are available below.

solution files

  • C++ next-greater-element-i/synced-solution.cpp
  • Python next-greater-element-i/synced-solution.py
  • TypeScript next-greater-element-i/synced-solution.ts

Solution files

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

    for num in reversed(nums2):
        while stack and stack[-class="syntax-number">1] <= num:
            stack.pop()
        next_greater[num] = stack[-class="syntax-number">1] if stack else -class="syntax-number">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() - class="syntax-number">1; i >= class="syntax-number">0; i--) {
            while (!st.empty() && st.top() <= nums2[i]) {
                st.pop();
            }
            next_greater[nums2[i]] = st.empty() ? -class="syntax-number">1 : st.top();
            st.push(nums2[i]);
        }

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

        return result;
    }
};
TypeScriptnext-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 - class="syntax-number">1; i >= class="syntax-number">0; i--) {
        while (stack.length > class="syntax-number">0 && stack[stack.length - class="syntax-number">1] <= nums2[i]) {
            stack.pop();
        }
        nextGreater.set(nums2[i], stack.length > class="syntax-number">0 ? stack[stack.length - class="syntax-number">1] : -class="syntax-number">1);
        stack.push(nums2[i]);
    }

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