博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
稀疏数组
阅读量:6881 次
发布时间:2019-06-27

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

稀疏数组

稀疏数组就是数组中,大部分的元素值都未被使用(或都为0),在数组中仅有少 部分的空间使用。因此造成内存空间的浪费,为了解决这问题,并且不影响数组中原 有的元素值,我们采用了一种压缩的方式来 表示稀疏数组的内容。 如图二维数组所示,有大部分的空间是无用的。

在这里可以使用稀疏数组进行压缩。其中在稀疏数组中第一部分所记录的是原数组的列数和行数以及元素使用的个数、第二部分所记录的是原数组中元素的位置和内容。经过压缩之后,原来需要声明大小为63的数组,而使用压缩后,只需要声明大小为6*3的数组,仅需18个存储空间。

代码实现

将二维数组变成稀疏数组

public class SparseArray {    private static final int row = 9;    private static final int col = 7;    public static void main(String[] args) {        // 创建一个原始的二维数组        int arr[][] = new int[row][col];        arr[1][1]=3;        arr[3][0]=1;        arr[3][1]=4;        arr[4][2]=7;        arr[5][5]=5;        System.out.println("输入原始二维数组-----------------");        prt(arr);        System.out.println("-------------------------------");        // 将二维数组变成稀疏数组        // 遍历得到非零数据个数        int sum=0;        for (int i = 0; i < arr.length; i++) {            for (int j = 0; j < arr[i].length; j++) {                if(arr[i][j]!=0){                    sum++;                }            }        }        // 创建对应稀疏数组        int sparse[][] = new int[sum+1][3];        // 给稀疏数组赋值        sparse[0][0] = arr.length;        sparse[0][1] = arr[0].length;        sparse[0][2] = sum;        // 遍历二维数组。将非零值存放到稀疏数组        int count =0; // 用于记录第几个非零        for (int i = 0; i < arr.length; i++) {            for (int j = 0; j < arr[i].length; j++) {                if(arr[i][j]!=0){                    count++;                    sparse[count][0] = i;                    sparse[count][1] = j;                    sparse[count][2] = arr[i][j];                }            }        }        // 输出稀疏数组        System.out.println("输出稀疏数组");        prt(sparse);        // 将稀疏数组还原成二维数组        int arr2[][] =new int[sparse[0][0]][sparse[0][1]];        for (int i = 1; i 

转载地址:http://tybbl.baihongyu.com/

你可能感兴趣的文章
《UNIX网络编程 卷1:套接字联网API(第3版)》——2.10 TCP端口号与并发服务器...
查看>>
Centrifugo —— 用 Golang 实现的实时消息通信平台
查看>>
《善用佳软:高效能人士的软件应用之道》一2.6 小工具之计算器
查看>>
《Web前端工程师修炼之道(原书第4版)》——关于浏览器
查看>>
关于CKEditor4.5.6的使用,自定义toolbar配置,上传图片案例(SpringMVC+MyBatis案例),自定义行高,去编辑器的中内容,将编辑器中内容设置到指定的位置等...
查看>>
Ejoy2D —— 来自云风的开源游戏图形引擎
查看>>
Linux主机肉鸡木马minerd导致CPU跑满
查看>>
Organelle —— 支持编程的智能音频设备,能玩!
查看>>
phpMyAdmin 4.0.0-rc4 发布
查看>>
《教孩子学编程(Python语言版)》——第2章 海龟作图—用Python 绘图 2.1 第一个海龟程序...
查看>>
「数据游戏」:使用 LSTM 模型预测三天后单股收盘价
查看>>
vuex持久化插件-解决浏览器刷新数据消失问题
查看>>
Vue-cli3 项目在安卓低版本系统和 IE 上白屏问题解决
查看>>
并发-7-同步容器和ConcurrentHashMap
查看>>
React安装:
查看>>
从0开始搭建微信小程序(前后端)的全过程
查看>>
小程序如何生成海报分享朋友圈
查看>>
检测后台错误
查看>>
微信小程序自定义组件
查看>>
我的友情链接
查看>>