**应用场景:**当一个数组中大部分元素为0,或者为同一个值的数组时,可以使用稀疏数组来存储给数组。从而达到压缩数组的目的
稀疏数组的处理方法:
记录数组一共有几行几列,有多少不同的值。
把具有不同值的元素的行列及值记录在一个小规模的数组中,从而缩小程序的规模。该小规模数组就是稀疏数组。
图例:

java代码实现:

//前提:需要了解二维数组与稀疏数组的关系
public class sparseArray {//二维数组转稀疏数组public static int[][] arrayToSparse(int[][] intArr1) {//遍历二维数组,获取非零元素的个数int sum = 0;//初始化个数System.out.println("二维数组:");for (int[] intArr : intArr1) {for (int item : intArr) {System.out.print("\t" + item);}System.out.println();}for (int[] intArr : intArr1) {for (int item : intArr) {if (item != 0) {sum++;}}}//得到二维数组非零元素的个数,创建稀疏数组,并在第一行记录二维数组一共有几行几列,有多少不同的值int[][] sparseArr = new int[sum + 1][3];sparseArr[0][0] = 11;sparseArr[0][1] = 11;sparseArr[0][2] = sum;//把具有不同值的元素的行列及值记录在除第一行外的其他行中int count = 0;//稀疏数组的行号for (int i = 0; i < 11; i++) {for (int j = 0; j < 11; j++) {if (intArr1[i][j] != 0) {count++;sparseArr[count][0] = i;sparseArr[count][1] = j;sparseArr[count][2] = intArr1[i][j];}}}System.out.println("稀疏数组:");for (int[] intArr : sparseArr) {for (int item : intArr) {System.out.print("\t" + item);}System.out.println();}return sparseArr;}//稀疏数组转二维数组public static int[][] sparseToArray(int[][] sparseArr) {//通过稀疏数组的第一行的第一/二列值,恢复二维数组int[][] intArr2 = new int[sparseArr[0][0]][sparseArr[0][1]];//通过稀疏数组的第一行的第三列值,获取循环次数,并把对应的值放入二维数组中for (int i = 1; i <= sparseArr[0][2]; i++) {intArr2[sparseArr[i][0]][sparseArr[i][1]] = sparseArr[i][2];}System.out.println("二维数组:");for (int[] intArr : intArr2) {for (int item : intArr) {System.out.print("\t" + item);}System.out.println();}return intArr2;}public static void main(String[] args) {//先创建一个11*11的二维数组int[][] intArr1 = new int[11][11];//给二维数组赋值intArr1[1][1] = 1;intArr1[1][2] = 2;intArr1[2][2] = 2;//二维数组转稀疏数组int[][] sparseArr = arrayToSparse(intArr1);//稀疏数组转二维数组int[][] intArr2 = sparseToArray(sparseArr);}
}

输出结果:

二维数组和稀疏数组转化相关推荐

  1. Java实现二维数组和稀疏数组的转换

    文章目录 稀疏数组 二维数组-->稀疏数组 稀疏数组-->二维数组 完整code 稀疏数组 简介:当编写的二维数组中存在很多不用的点但初始化时都赋值为0时,这个二维数组的观赏性很低并且非常 ...

  2. 【二维数组与稀疏数组的相互转化】

    稀疏数组 简介 一.将二维数组转化成稀疏数组 二.将稀疏数组转化为原二维数组 简介 当一个二维数组大部分是0,或者为同一个值的数组时(即有效数据远小于无效数据时),可以用稀疏数组. 具体格式如下 下标 ...

  3. 二维数组转稀疏数组,写入文件后再读取文件,将内容转回二维数组

    该方法模拟的是将棋盘的位置保存到稀疏数组中,降低存储的数据量,通过写入磁盘做持久化,再读入后恢复棋盘内容. package com.moson.sparsearray;import java.io.* ...

  4. 数据结构学习-二维数组与稀疏数组转换

    package 稀疏数组和队列;public class 稀疏数组 {public static void main(String[] args) {// TODO Auto-generated me ...

  5. 减小程序规模!稀疏数组Sparsearray,数据结构二维数组与稀疏数组转换,Java实现

    文章目录 基本介绍 应用实例 基本介绍 当一个数组中大部分元素为0,或者为同一个值的数组时,可以使用稀疏数组来保存该数组. 稀疏数组的处理方法是: ①记录数组一共有几行几列,有多少个不同的值(0除外) ...

  6. 以五子棋为背景的二维数组和稀疏数组(节省空间)的转换、用io流实现本地磁盘的存储

    目录 用二维数组来表示一个棋盘: 将二维数组转换为稀疏数组 1.先遍历二维数组,得到非0数据的个数 2.创建稀疏数组 3.输出稀疏数组 利用io流实现与本地文件的交互 ①.把稀疏数组存入本地文件中 ② ...

  7. HDU2642(二维的树状数组)

    二维的树状数组,我记得是模版!^ _ ^ 题意很清楚:就是这部分的原理:sum(x1,y1)+sum(x2-1,y2-1)-sum(x1,y2-1)-sum(x2-1,y1);其实可以和概率论中的一个 ...

  8. 间接通过new 来申请一个二维的堆内存数组

    我们知道无法直接通过new 来申请一个二维的堆内存数组,于是有人想出了这样一个办法:创建一个一维堆内存指针数组,即每个数组元素是一个指针,然后用new 给各个指针分配一个一维的堆内存数组,那么最后表示 ...

  9. matlab 三维数组运算,MATLAB二维三维画图仿真数组运算

    MATLAB二维三维画图仿真数组运算 1. 数学 (1) 数组运算: x=[1 2 3 4]; y=[3 4 5 6]; z=x+y %数组x与数组y相加得到数组z z = 4 6 8 10 z=x- ...

  10. 关于图的二维矩阵转为一维数组的理解。

    一开始看二维矩阵转为一维数组的时候还是有点懵的,为啥是N(N+1)/2呢,为啥不是N*N/2呢,这个矩阵明明是N*N的一个正方形啊,我要省一半空间直接除2不就行了,带着这个问题我观察了一下这个PPT里 ...

最新文章

  1. 《LeetCode力扣练习》第617题 合并二叉树 Java
  2. RabbitMQ添加用户
  3. Java基础---认识多态
  4. 电商是真的难做了吗?
  5. endnote style_教你在论文写作中玩转 Endnote
  6. 大数据分析的关键特征有哪些
  7. Windows设计师:多核芯片要求全新操作系统
  8. 梦想是如何失去的?看小米和魅族发布有感
  9. 北斗导航 | RAIM算法流程图
  10. ActivityMQ
  11. 衬线字体和无衬线字体区别
  12. ActiveX控件注册的几种方法
  13. 【RQNOJ86】智捅马蜂窝【最短路】
  14. 2007年日历带农历表_2007年日历表,2007年农历表(阴历阳历节日对照表)
  15. python-转义字符及其使用
  16. Java初级知识复习-2021.12.27~2022.02.09
  17. 软件造价评估:如何估算测试工作量?
  18. jquery :visible Selector 用于判断元素是否显示
  19. cydia java_Cydia Substrate 使用
  20. ENVI数据文件打开

热门文章

  1. (转) 数字加密货币全球资源汇总
  2. 阿里达摩院赵昆:获评“中国客户服务领袖”
  3. 解读畅捷通微服务治理能力提升之路
  4. 【语音合成】基于matlab两端音频合成【含Matlab源码 1490期】
  5. 【路径规划】基于matlab粒子群算法栅格地图路径规划【含Matlab源码 579期】
  6. 【语音去噪】基于matlab改进谱减法语音去噪【含Matlab源码 569期】
  7. 建站模板论坛_【714】号称全球最快的无代码拖拽集成建站工具?
  8. 数据排序pandas
  9. oc传参数给js_一道面试题引发关于 js 隐式转换的思考
  10. android音频杂音问题_如何消除音频中的噪声?用这个简单好用的音频剪辑软件就够了...