题目地址:
https://leetcode.com/problems/decompress-run-length-encoded-list/
给定一个数组 A A A,要求产生一个新的数组 B B B,产生的方式是,先填 A [ 0 ] A[0] A[0]个 A [ 1 ] A[1] A[1],再填 A [ 2 ] A[2] A[2]个 A [ 3 ] A[3] A[3],以此类推。数据保证合法。
代码如下:
public class Solution {
public int[] decompressRLElist(int[] nums) {
int cnt = 0;
for (int i = 0; i < nums.length; i += 2) {
cnt += nums[i];
}
int[] res = new int[cnt];
for (int i = 0, idx = 0; i < nums.length; i += 2) {
for (int j = 0; j < nums[i]; j++) {
res[idx++] = nums[i + 1];
}
}
return res;
}
}
时间复杂度 O ( n + ∑ i A [ 2 i ] ) O(n+\sum_{i} A[2i]) O(n+∑iA[2i]),空间 O ( ∑ i A [ 2 i ] ) O(\sum_{i} A[2i]) O(∑iA[2i])。
C++:
class Solution {
public:
vector<int> decompressRLElist(vector<int>& nums) {
vector<int> res;
for (int i = 0; i < nums.size(); i += 2)
for (int j = 0; j < nums[i]; j++)
res.push_back(nums[i + 1]);
return res;
}
};
时空复杂度一样。