900. RLE Iterator

Difficulty:
Related Topics:
Similar Questions:

    Problem

    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 (Java)

    class RLEIterator {
        private int index;
        private final int[] array;
    
        public RLEIterator(int[] encoding) {
            index = 0;
            array = encoding;
        }
    
        public int next(int n) {
            int lastElement = -1;
            while (n > 0 && index < array.length) {
                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:
     * RLEIterator obj = new RLEIterator(encoding);
     * int param_1 = obj.next(n);
     */
    

    Explain:

    nope.

    Complexity: