算法1313. 解压缩编码列表(多语言实现)
Posted 二当家的白帽子
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了算法1313. 解压缩编码列表(多语言实现)相关的知识,希望对你有一定的参考价值。
非常感谢你阅读本文~
欢迎【点赞】【收藏】【评论】~
放弃不难,但坚持一定很酷~
希望我们大家都能每天进步一点点~
本文由 二当家的白帽子:https://le-yi.blog.csdn.net/ 博客原创~
文章目录
- 1313. 解压缩编码列表:
- 样例 1:
- 样例 2:
- 提示:
- 分析
- 题解
- 原题传送门:https://leetcode-cn.com/problems/decompress-run-length-encoded-list/
1313. 解压缩编码列表:
给你一个以行程长度编码压缩的整数列表 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
分析
- 这道算法题目感觉真的没有什么特别技巧,就是按照题意模拟即可。
- 对于大部分语言都有动态数据结构支持,但是动态数据结构有一个点需要注意,就是在动态添加元素的时候,会发生动态扩展,也就可能发生内容拷贝。
- 二当家的其中一些题解先遍历一次,计算出总的长度,这样的开销可以抵消使用动态数据结构发生动态扩展的开销。
题解
java
class Solution
public int[] decompressRLElist(int[] nums)
int len = 0;
for (int i = 0; i < nums.length; i += 2)
len += nums[i];
int[] ans = new int[len];
for (int i = 0, j = 0; i < nums.length; i += 2)
for (int k = 0; k < nums[i]; ++k)
ans[j++] = nums[i + 1];
return ans;
c
/**
* Note: The returned array must be malloced, assume caller calls free().
*/
int* decompressRLElist(int* nums, int numsSize, int* returnSize)
*returnSize = 0;
for (int i = 0; i < numsSize; i += 2)
*returnSize += nums[i];
int *ans = malloc(*returnSize * sizeof(int));
for (int i = 0, *p = ans; i < numsSize; i += 2)
while (nums[i]--)
(*p++) = nums[i + 1];
return ans;
c++
class Solution
public:
vector<int> decompressRLElist(vector<int>& nums)
vector<int> ans;
for (int i = 0, l = nums.size(); i < l; i += 2)
ans.insert(ans.end(), nums[i], nums[i + 1]);
return ans;
;
python
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])]
go
func decompressRLElist(nums []int) []int
l := 0
for i := 0; i < len(nums); i += 2
l += nums[i]
ans := make([]int, l)
for i, j := 0, 0; i < len(nums); i += 2
for k := 0; k < nums[i]; k, j = k+1, j+1
ans[j] = nums[i+1]
return ans
rust
impl Solution
pub fn decompress_rl_elist(nums: Vec<i32>) -> Vec<i32>
(0..nums.len()).step_by(2).flat_map(|i|
[nums[i + 1]].repeat(nums[i] as usize).into_iter()
).collect()
原题传送门:https://leetcode-cn.com/problems/decompress-run-length-encoded-list/
以上是关于算法1313. 解压缩编码列表(多语言实现)的主要内容,如果未能解决你的问题,请参考以下文章