https://leetcode.com/problems/decompress-run-length-encoded-list/description/ Easy

Условие

Дан массив целых чисел nums, представляющий сжатый список. Каждая пара чисел [freq, val] означает, что значение val повторяется freq раз. Распакуйте список и верните его.

Примеры

Input: [1, 2, 3, 4] Output: [2, 4, 4, 4] Explanation: 1 раз число 2, затем 3 раза число 4.

Input: [1, 1, 2, 3] Output: [1, 3, 3]

Решение

fun decompressRLElist(nums: IntArray): IntArray {
    var totalLength = 0
    var i = 0

    // Сначала вычисляем общую длину результирующего массива
    while (i < nums.size) {
        totalLength += nums[i] // nums[i] — это freq
        i += 2 // Переходим к следующей паре
    }

    // Создаём массив нужной длины
    val result = IntArray(totalLength)
    var index = 0
    i = 0

    // Проходим по каждой паре [freq, val]
    while (i < nums.size) {
        val freq = nums[i]
        val value = nums[i + 1]

        // Заполняем result значением value freq раз
        repeat(freq) {
            result[index++] = value
        }

        i += 2 // Переход к следующей паре
    }

    return result
}

Временная сложность

O(n), где n — длина исходного массива.

Пространственная сложность

O(m), где m — длина распакованного массива.