Rle Iterator

// https://leetcode.com/problems/rle-iterator/

/*
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.

For example, the sequence arr = [8,8,8,5,5] can be encoded to be encoding = [3,8,2,5]. 
encoding = [3,8,0,9,2,5] and encoding = [2,8,1,8,2,5] are also valid RLE of arr.
Given a run-length encoded array, design an iterator that iterates through it.

Implement the RLEIterator class:

RLEIterator(int[] encoded) Initializes the object with the encoded array encoded.
int next(int n) Exhausts the next n elements and returns the last element exhausted in this way. 
If there is no element left to exhaust, return -1 instead.

*/

#include <vector>

using namespace std;

class RLEIterator {
public:
    vector<int> encoding;
    int idx;
    RLEIterator(vector<int>& encoding) {
        this->encoding = encoding;
        idx = 0;
    }

    int next(int n) {
        while (n > 0 && idx < encoding.size()) {
            if (n > encoding[idx]) {
                n -= encoding[idx];
                idx += 2;
            }
            else {
                encoding[idx] -= n;
                break;
            }
        }

        if (idx + 1 >= encoding.size()) {
            return -1;
        }

        return encoding[idx + 1];
    }
};```

Last updated