LeetCode 1313.解压缩编码列表

解压缩编码列表

原题地址https://leetcode-cn.com/problems/decompress-run-length-encoded-list/
LeetCode 1313.解压缩编码列表_第1张图片

读题可以了解到:
每两个数字一组,第一个数字表示着第二个数字出现的频次。

解题思路:

  1. 先计算解压后数组的长度。
      n e w L e n g t h = ∑ i = 2 × i n u m s . l e n g t h n u m s [ i ] ( i > = 0 ) \ newLength = \sum_{i=2 \times i}^{nums.length} nums[i]\qquad(i>=0)  newLength=i=2×inums.lengthnums[i](i>=0)
  2. 创建一个新的数组 n e w A r r newArr newArr,长度为 n e w L e n g t h newLength newLength
  3. 两层循环嵌套,第一层循环遍历 n u m s nums nums数组的数组下标为 2 × i ( i > = 0 ) 2\times i(i>=0) 2×i(i>=0)的元素,第二层循环循环 n u m s [ i ] nums[i] nums[i]次向新数组 n e w A r r newArr newArr的末尾加入 n u m s [ i + 1 ] nums[i+1] nums[i+1]的元素。
class Solution {
    public int[] decompressRLElist(int[] nums) {
        int len = nums.length;
        int newLength = 0;
        //1.计算解压后数组的长度
        for (int i = 0; i < len; i += 2) {
            newLength += nums[i];
        }
        int index = 0;
        //2.创建一个新的数组来存储解压后的编码
        int[] newArr = new int[newLength];
        //3.1遍历2*i得到打印次数,存在a中
        for (int i = 0; i < len; i += 2) {
            //3.2解压出a个值为b的元素
            for (int a = nums[i]; a > 0; a--,index++) {
                newArr[index] = nums[i+1];
            }
        }
        return newArr;
    }
}

你可能感兴趣的:(LeetCode 1313.解压缩编码列表)