Run-length encoding is a compression algorithm that allows for an integer array nums with many segments of consecutive repeated numbers to be represented by a (generally smaller) 2D array encoded. Each encoded[i] = [vali, freqi] describes the ith segment of repeated numbers in nums where vali is the value that is repeated freqi times.
For example, nums = [1,1,1,2,2,2,2,2] is represented by the run-length encoded array encoded = [[1,3],[2,5]]. Another way to read this is "three 1's followed by five 2's".
The product of two run-length encoded arrays encoded1 and encoded2 can be calculated using the following steps:
Expand both encoded1 and encoded2 into the full arrays nums1 and nums2 respectively.
Create a new array prodNums of length nums1.length and set prodNums[i] = nums1[i] * nums2[i].
Compress prodNums into a run-length encoded array and return it.
You are given two run-length encoded arrays encoded1 and encoded2 representing full arrays nums1 and nums2 respectively. Both nums1 and nums2 have the same length. Each encoded1[i] = [vali, freqi] describes the ith segment of nums1, and each encoded2[j] = [valj, freqj] describes the jth segment of nums2.
Return the product of encoded1 and encoded2.
Note: Compression should be done such that the run-length encoded array has the minimum possible length.
Product of Two Run-Length Encoded Arrays — Solution
The key insight is to use two pointers to process both run-length encoded arrays simultaneously without expanding them fully. Instead of creating the full arrays (which uses O(n) space), we can process overlapping segments directly and build the result on-the-fly. Best approach is Two Pointers with Time: O(m+n), Space: O(1).
Common Approaches
✓
Brute Force - Full Expansion
⏱️ Time: O(n)
Space: O(n)
First expand both run-length encoded arrays into their full representations, then multiply corresponding elements, and finally compress the result back into run-length encoding. This is straightforward but uses extra space for the expanded arrays.
Two Pointers - Direct Processing
⏱️ Time: O(m + n)
Space: O(1)
Instead of expanding the entire arrays, use two pointers to track current positions in both encoded arrays. Process overlapping segments by calculating how many elements can be processed together, compute their product, and add to result if different from previous.