Medium
Product of Two Run-Length Encoded Arrays — C++
Full explanation · Time O(m + n) · Space O(1)
// Time: O(m + n)
// Space: O(1)
class Solution {
public:
vector<vector<int>> findRLEArray(vector<vector<int>>& encoded1, vector<vector<int>>& encoded2) {
vector<vector<int>> result;
for (int i = 0, j = 0, remain1 = 0, remain2 = 0;
(remain1 || i < size(encoded1)) && (remain2 || j < size(encoded2));) {
if (!remain1) {
remain1 = encoded1[i++][1];
}
if (!remain2) {
remain2 = encoded2[j++][1];
}
int cnt = min(remain1, remain2);
remain1 -= cnt;
remain2 -= cnt;
if (!empty(result) && result.back()[0] == encoded1[i - 1][0] * encoded2[j - 1][0]) {
result.back()[1] += cnt;
} else {
result.push_back({encoded1[i - 1][0] * encoded2[j - 1][0], cnt});
}
}
return result;
}
};