1313. Decompress Run-Length Encoded List
Description
We are given a list nums of integers representing a list compressed with run-length encoding.
Consider each adjacent pair of elements [freq, val] = [nums[2*i], nums[2*i+1]] (with i >= 0). For each such pair, there are freq elements with value val concatenated in a sublist. Concatenate all the sublists from left to right to generate the decompressed list.
Return the decompressed list.
Example 1:
Input: nums = [1,2,3,4] Output: [2,4,4,4] Explanation: The first pair [1,2] means we have freq = 1 and val = 2 so we generate the array [2]. The second pair [3,4] means we have freq = 3 and val = 4 so we generate [4,4,4]. At the end the concatenation [2] + [4,4,4] is [2,4,4,4].
Example 2:
Input: nums = [1,1,2,3] Output: [1,3,3]
Constraints:
2 <= nums.length <= 100nums.length % 2 == 01 <= nums[i] <= 100
My Solution
Source Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
/**
* @param {number[]} nums
* @return {number[]}
*/
let decompressRLElist = function(nums) {
let result = [];
let ptr = 0;
while(ptr < nums.length){
let freq = nums[ptr];
let val = nums[ptr+1];
for(let x = 0; x < freq; x++){
result.push(val);
}
ptr += 2;
}
return result;
};
Analysis
This is simple and straightforward. We keep a pointer to the current number
we're looking at. This is the frequency freq. The number that
follows it is the number to insert in the new array value. Then
we simply insert that number value freq times with a
loop. That's really all there is to it.
Let f be the largest frequency in nums and
n be the number of values in nums. Note that
n isn't the length of nums, that would actually be
2n. Anyway, let's consider the worst case scenario for this
algorithm. That's when the frequency of every value is f. Then
there will be n * f total insertions so the running time is
simply O(fn).
I thought about using a hash map for this but it seemed like overkill. You are sacrificing space for speed. Plus, I imagine that compression/decompression on the same item isn't done constantly over and over so speed isn't much of a concern anyway.