Решение
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()
}