https://leetcode.com/problems/next-greater-element-i Easy

Решение

fun nextGreaterElement(nums1: IntArray, nums2: IntArray): IntArray {
    val nextGreaterMap = mutableMapOf<Int, Int>()
    val stack = mutableListOf<Int>()

    // Проходим по элементам nums2 и находим следующий больший элемент для каждого
    for (num in nums2) {
        // Если текущий элемент больше элемента на вершине стека, обновляем следующий больший элемент
        while (stack.isNotEmpty() && stack.last() < num) {
            nextGreaterMap[stack.removeAt(stack.size - 1)] = num
        }
        stack.add(num)  // Добавляем текущий элемент в стек
    }

    // Если для элемента нет большего справа, устанавливаем -1
    for (num in stack) {
        nextGreaterMap[num] = -1
    }

    // Заполняем результат для nums1 на основе построенного словаря
    return nums1.map { nextGreaterMap[it] ?: -1 }.toIntArray()
}