LeetCode in Kotlin

900. RLE Iterator

Medium

We can use run-length encoding (i.e., RLE) to encode a sequence of integers. In a run-length encoded array of even length encoding (0-indexed), for all even i, encoding[i] tells us the number of times that the non-negative integer value encoding[i + 1] is repeated in the sequence.

Given a run-length encoded array, design an iterator that iterates through it.

Implement the RLEIterator class:

Example 1:

Input

[“RLEIterator”, “next”, “next”, “next”, “next”]

[[[3, 8, 0, 9, 2, 5]], [2], [1], [1], [2]]

Output: [null, 8, 8, 5, -1]

Explanation:

RLEIterator rLEIterator = new RLEIterator([3, 8, 0, 9, 2, 5]); // This maps to the sequence [8,8,8,5,5].
rLEIterator.next(2); // exhausts 2 terms of the sequence, returning 8. The remaining sequence is now [8, 5, 5].
rLEIterator.next(1); // exhausts 1 term of the sequence, returning 8. The remaining sequence is now [5, 5].
rLEIterator.next(1); // exhausts 1 term of the sequence, returning 5. The remaining sequence is now [5].
rLEIterator.next(2); // exhausts 2 terms, returning -1. This is because the first term exhausted was 5,
// but the second term did not exist. Since the last term exhausted does not exist, we return -1. 

Constraints:

Solution

@Suppress("NAME_SHADOWING")
class RLEIterator(private val array: IntArray) {
    private var index = 0
    fun next(n: Int): Int {
        var n = n
        var lastElement = -1
        while (n > 0 && index < array.size) {
            if (array[index] > n) {
                array[index] -= n
                lastElement = array[index + 1]
                break
            } else if (array[index] == n) {
                array[index] = 0
                lastElement = array[index + 1]
                index += 2
                break
            } else {
                n -= array[index]
                index += 2
            }
        }
        return lastElement
    }
}

/*
 * Your RLEIterator object will be instantiated and called as such:
 * var obj = RLEIterator(encoding)
 * var param_1 = obj.next(n)
 */
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy