comments | difficulty | edit_url | rating | source | tags | |
---|---|---|---|---|---|---|
true |
简单 |
1317 |
第 17 场双周赛 Q1 |
|
给你一个以行程长度编码压缩的整数列表 nums
。
考虑每对相邻的两个元素 [freq, val] = [nums[2*i], nums[2*i+1]]
(其中 i >= 0
),每一对都表示解压后子列表中有 freq
个值为 val
的元素,你需要从左到右连接所有子列表以生成解压后的列表。
请你返回解压后的列表。
示例 1:
输入: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]。
示例 2:
输入:nums = [1,1,2,3] 输出:[1,3,3]
提示:
2 <= nums.length <= 100
nums.length % 2 == 0
1 <= nums[i] <= 100
我们可以直接模拟题目描述的过程,从左到右遍历数组
时间复杂度
class Solution:
def decompressRLElist(self, nums: List[int]) -> List[int]:
return [nums[i + 1] for i in range(0, len(nums), 2) for _ in range(nums[i])]
class Solution {
public int[] decompressRLElist(int[] nums) {
List<Integer> ans = new ArrayList<>();
for (int i = 0; i < nums.length; i += 2) {
for (int j = 0; j < nums[i]; ++j) {
ans.add(nums[i + 1]);
}
}
return ans.stream().mapToInt(i -> i).toArray();
}
}
class Solution {
public:
vector<int> decompressRLElist(vector<int>& nums) {
vector<int> ans;
for (int i = 0; i < nums.size(); i += 2) {
for (int j = 0; j < nums[i]; j++) {
ans.push_back(nums[i + 1]);
}
}
return ans;
}
};
func decompressRLElist(nums []int) (ans []int) {
for i := 1; i < len(nums); i += 2 {
for j := 0; j < nums[i-1]; j++ {
ans = append(ans, nums[i])
}
}
return
}
function decompressRLElist(nums: number[]): number[] {
const ans: number[] = [];
for (let i = 0; i < nums.length; i += 2) {
for (let j = 0; j < nums[i]; j++) {
ans.push(nums[i + 1]);
}
}
return ans;
}
impl Solution {
pub fn decompress_rl_elist(nums: Vec<i32>) -> Vec<i32> {
let mut ans = Vec::new();
let n = nums.len();
let mut i = 0;
while i < n {
let freq = nums[i];
let val = nums[i + 1];
for _ in 0..freq {
ans.push(val);
}
i += 2;
}
ans
}
}
/**
* Note: The returned array must be malloced, assume caller calls free().
*/
int* decompressRLElist(int* nums, int numsSize, int* returnSize) {
int n = 0;
for (int i = 0; i < numsSize; i += 2) {
n += nums[i];
}
int* ans = (int*) malloc(n * sizeof(int));
*returnSize = n;
int k = 0;
for (int i = 0; i < numsSize; i += 2) {
int freq = nums[i];
int val = nums[i + 1];
for (int j = 0; j < freq; j++) {
ans[k++] = val;
}
}
return ans;
}