アレイ1313タイトル
1313圧縮解除コード化されたリスト
あなたの整数NUMSのランレングス圧縮符号化リストを与えるために。
二つの隣接する各対の要素[A、B] = [NUMS [2 * i]は、NUMS [2 * I + 1](I> = 0の場合)、各ペアはリア減圧発現を検討B要素の値。
解凍後のリストに戻ってください。
出典:滞在ボタン(LeetCode)
//leetcode-cn.com/problems/decompress-run-length-encoded-list:リンク:httpsの
すべてのネットワークからの控除が著作権を保有。商業転載は、ソースを明記してください許可公式、非商用の転載をご連絡ください。
例:
入力:NUMS = [1,2,3,4]
出力:[2,4,4,4-]
説明:最初のペア[1,2]出現2の周波数は配列[2]を生成するために、1で表します。
第二の対[3,4]は配列[4,4,4]を生成するために、3出現4の周波数を表します。
最後に一緒に直列に[2] + [4,4,4] = [2,4,4,4-]に。
ヒント:
2 <= nums.length <= 100
nums.length % 2 == 0
1 <= nums[i] <= 100
キー問題解決:印刷の配列の新しい長さを決定するために、第1 - NUMS続いも長期添字要素と格納されている、[I](iは奇数である)プリントNUMS [I-1]回。
class Solution {
public int[] decompressRLElist(int[] nums) {
int sum = 0;
for(int i=0;i<nums.length;i+=2){ //计算偶数项角标所存数字的和sum
sum+=nums[i];
}
int[] arr = new int[sum]; //建立长度为sum的新数组,用来输出数据
int index=0; //新数组从第一个数开始打印
for(int j=1;j<nums.length;j+=2){ //遍历奇数项角标,要打印的数据
for(int k=0;k<nums[j-1];k++){ //把当前要打印的数据nums[j]打印nums[j-1]次
arr[index++]=nums[j]; //arr数组从头到尾打印arr[j]
}
}
return arr; //返回arr的值
}
}
結果: