给你一个以行程长度编码压缩的整数列表 nums 。 考虑每对相邻的两个元素 [freq, val] = [nums[2*i], nums[2*i+1]] (其中 i >= 0 ),每一对都表示解压后
发布日期:2021-10-06 02:38:41 浏览次数:4 分类:技术文章

本文共 1148 字,大约阅读时间需要 3 分钟。

给你一个以行程长度编码压缩的整数列表 nums 。

考虑每对相邻的两个元素 [freq, val] = [nums[2*i], nums[2*i+1]] (其中 i >= 0 ),每一对都表示解压后子列表中有 freq 个值为 val 的元素,你需要从左到右连接所有子列表以生成解压后的列表。

请你返回解压后的列表。

示例:

输入: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 {

    public int[] decompressRLElist(int[] nums) {

         if(nums.length<=1){

            return new int[]{nums[0]};

        }

        int len=0;

        for(int i=0;i<nums.length;i+=2){

            len+=nums[i];

        }

        int[] res=new int[len];

        for(int i=0,j=0;i<nums.length;i+=2){

            for(int k=0;k<nums[i];k++){

                res[j++]=nums[i+1];

            }

        }

        return res;

    }

}

方法二:使用ArrayList存储结果,并将结果转成数组

class Solution {

 public int[] decompressRLElist(int[] nums) {

        if (nums.length == 1) {

            return new int[]{nums[0]};

        }

        List<Integer> ans = new ArrayList<>(nums.length);

        for (int i = 0; i < nums.length; i += 2) {

            for (int j = 0; j < nums[i]; j++) {

                ans.add(nums[i+1]);

            }

        }

        int[] res=new int[ans.size()];

        int index=0;

        for (Integer num : ans) {

            res[index++]=num;

        }

        return res;

    }

}

 

 

转载地址:https://blog.csdn.net/luxuiary/article/details/107482461 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:【每日一题】把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如,数组 [3,4,5,1,2] 为 [1,2,3,4,5]
下一篇:【面试题】高级Java 面试知识点总结

发表评论

最新留言

很好
[***.229.124.182]2024年03月27日 18时44分42秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章

mysql 行转列 显示_mysql 行转列 (结果集以坐标显示) 2019-04-21
由于连接方在一段时间后没有正确答复或连接的主机_新风换气机使用效果不佳,为何?掌握正确使用方法就好了... 2019-04-21
mysql 查询姓王_MySQL查询语句练习题,测试足够用了 2019-04-21
mysql多实例脚本_mysql多实例脚本 2019-04-21
python如何生成excel文件夹_用python脚本通过excel生成文件夹树结构 2019-04-21
python获取post请求中的所有参数_Django从POST reques获取请求参数 2019-04-21
mysql加密复制_MySQL主从复制使用SSL加密 2019-04-21
python启动远端 exe_python打包exe开机自动启动的实例(windows) 2019-04-21
java当前路径_java获取当前路径的几种方法 2019-04-21
java web传递参数_Javaweb的八种传值方式 2019-04-21
java gui支持的包有哪两个_Java GUI 2019-04-21
java list详解_java集合List解析 2019-04-21
java坐标代码_java实现计算地理坐标之间的距离 2019-04-21
kettle调用java程序_Kettle ETL调用 java代码来进行数据库的增删改查 2019-04-21
mysql 取两个时间差 php_在php和MySql中计算时间差的方法详解 2019-04-21
mysql 重启数据库实例_mysql 单机多实例重启数据库服务 2019-04-21
collator java_Java Collator getInstance(Locale)用法及代码示例 2019-04-21
dtc mysql_DTCC归来-高可用可扩展数据库架构探讨 2019-04-21
java怎样将日期本土化_Java中的日期操作 2019-04-21
java生产者消费者模型到精通_java生产者消费者模型 2019-04-21