原题链接:https://leetcode-cn.com/problems/decompress-run-length-encoded-list/
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------
给你一个以行程长度编码压缩的整数列表 nums 。
考虑每对相邻的两个元素 [a, b] = [nums[2*i], nums[2*i+1]] (其中 i >= 0 ),每一对都表示解压后有 a 个值为 b 的元素。
请你返回解压后的列表。
示例:
输入:nums = [1,2,3,4]
输出:[2,4,4,4]
解释:第一对 [1,2] 代表着 2 的出现频次为 1,所以生成数组 [2]。
第二对 [3,4] 代表着 4 的出现频次为 3,所以生成数组 [4,4,4]。
最后将它们串联到一起 [2] + [4,4,4] = [2,4,4,4]。
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------
观察示例:我们可以发现,偶数角标代表的是打印的次数,而奇数角标代表的是打印的数字;建立一个新数组,新数组的长度是需要打印的数字,恰恰是偶数角标之和;我们先遍历偶数角标,将新数组的长度确定出来;再遍历奇数角标,将需要打印的数字确定出来,我们又会发现,数字需要打印的次数,其实就是这个数字角标-1,j代表的就是需要打印的次数
class Solution {
public int[] decompressRLElist(int[] nums) {
int len=0;
//遍历偶角标,得到新数组的长度
for(int i=0;i<nums.length;i+=2){
len+=nums[i];
}
int[] res=new int[len];
int index=0;
//遍历奇数角标,获取需要多次写入的数据
for(int i=1;i<nums.length;i+=2){
for(int j=0;j<nums[i-1];j++){//j表示打印的次数
res[index++]=nums[i];
}
}
return res;
}
}