1.稀疏数组

当一个数组中大部分元素为0,或者为同一个值的数组时,可以使用稀疏数组来保存该数组。 稀疏数组的处理方法是:

1.1记录数组一共有几行几列,有多少个不同的值

1.2把具有不同值的元素的行列及值记录在一个小规模的数组中,从而缩小程序的规模 I

2.二维数组转稀疏数组的思路

2.1.遍历原始的二维数组,得到有效数据的个数sum

2.2.根据sum 就可以创建稀疏数组sparseArr intsum+1

2.3.将二维数组的有效数据数据存入到稀疏数组

3.稀疏数组转原始的二维数组的思路

3.1.先读取稀疏数组的第一行,根据第一行的数据,创建原始的二维数组,比如 上面的chessAr2=int11

3.2.在读取稀疏数组后几行的数据,并赋给原始的二维数组即可.

4.应用实例

使用稀疏数组,来保留类似前面的二维数组(棋盘、地图等等)把稀疏数组存盘,并且可以从新恢复原来的二维数组数整体思路分析

public class SparseArray {
public static void main(String[] args) {
//创建二维数组 1表示黑色的 2表示蓝色的 0表示空
int chessarr1[][] = new int[11][11];
chessarr1[1][2] = 1;
chessarr1[2][3] = 2;
//遍历循环二维数组
System.out.println("原始二维数组为");
for (int[] row : chessarr1) {
for (int data : row) {
System.out.printf("%d\t", data);
}
System.out.println();
}
//遍历原始二维数组,从而得到非0的个数
int sum = 0;
for (int i = 0; i < 11; i++) {
for (int j = 0; j < 11; j++) {
if (chessarr1[i][j] != 0) {
sum++;
}
}
}
//创建对应的稀疏数组
int sparsearr[][] = new int[sum + 1][3];
//给稀疏数组复制
sparsearr[0][0] = 11;
sparsearr[0][1] = 11;
sparsearr[0][2] = sum;
//遍历二维数组 将非0的值放在 sparsearr中
int count=0;//用于记录第几个非0数据
for (int i = 0; i < 11; i++) {
for (int j = 0; j < 11; j++) {
if(chessarr1[i][j]!=0){
count++;
sparsearr[count][0]=i;
sparsearr[count][1]=j;
sparsearr[count][2]=chessarr1[i][j];
}
}
}
//输出稀疏数组的形式
System.out.println();
System.out.println("稀疏数组为");
for(int i=0;i<sparsearr.length;i++){
System.out.printf("%d\t%d\t%d\t\n",sparsearr[i][0],sparsearr[i][1],sparsearr[i][2]);
}
System.out.println(); //将稀疏数组转换为二维数组
int chessarr2[][]=new int[sparsearr[0][0]][sparsearr[0][1]];
//从第二行开始遍历稀疏数组
for(int i=1;i<sparsearr.length;i++){
chessarr2[sparsearr[i][0]][sparsearr[i][1]]=sparsearr[i][2];
}
//恢复后的稀疏数组为
for (int[] row : chessarr2) {
for (int data : row) {
System.out.printf("%d\t", data);
}
System.out.println();
}
}
}

稀疏数组(java实现)的更多相关文章

  1. 数据结构与算法之java语言实现(一):稀疏数组

    一.概念&引入 什么是稀疏数组? 稀疏数组是面对一个二维数组中有众多重复元素的情况下,为了节省磁盘空间,将此二维数组转化为更加节省空间的一种数组,我们叫他稀疏数组. 只是听概念或许会看不明白, ...

  2. 图解Java数据结构之稀疏数组

    在编程中,算法的重要性不言而喻,没有算法的程序是没有灵魂的.可见算法的重要性. 然而,在学习算法之前我们需要掌握数据结构,数据结构是算法的基础. 我在大学的时候,学校里的数据结构是用C语言教的,因为对 ...

  3. 【学习总结】java数据结构和算法-第三章-稀疏数组和队列

    相关链接 [学习总结]尚硅谷2019java数据结构和算法 github:javaDSA 目录 稀疏数组 队列 稀疏数组 稀疏数组介绍 图示 应用实例 代码实现 SparseArray.java:与二 ...

  4. java算法--稀疏数组

    数据结构必要知识 线性结构 线性结构是最常用的数据结构,数据元素之间存在一对一的线性关系. 线性结构有两种不同的存储结构,即顺序存储结构和链式存储结构.顺序存储的线性表称为顺序表,顺序表中的存储元素是 ...

  5. Java数组声明创建和使用以及多维数组、Arrays类、稀疏数组

    目录 数组概述 数组声明创建 内存分析 java内存分析 堆 栈 方法区 三种初始化 静态初始化 动态初始化 数组的默认初始化 数组的四个基本特点 数组边界 小结: 数组使用 数组基础使用 For E ...

  6. Java的稀疏数组的简单代码实现

    目录 Java的稀疏数组的简单代码实现 一.稀疏数组的基本概念 二.稀疏数组的Java代码实现思路 三.稀释数组的Java代码实现 四.结语 Java的稀疏数组的简单代码实现 一.稀疏数组的基本概念 ...

  7. 数据结构(1):稀疏数组使用java实现

    主要是用于数组压缩,去除无效的数组内容: 原数组内容: 0 0 0 0 0 0 1 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 转换成 稀疏数组 5 5 2 1 1 1 2 ...

  8. java基础——多维数组和稀疏数组

    多维数组 多维数组可以堪称数组的数组,比如二维数组就是一个特殊的一维数组,其中每一个元素都是一个以为数组 而且数组 int a[][]= new int[2][3]; public class Arr ...

  9. Java数组07——稀疏数组

    稀疏数组 总结: 记录有效的坐标: 记录原始做表的大小和有效值的个数 记录每一个有效值的坐标 ,变成一个新的数组 age:  package array; ​ public class ArrayDe ...

  10. java基础-冒泡排序以及稀疏数组

    java基础 以下内容为本人的学习笔记,如需要转载,请声明原文链接   https://www.cnblogs.com/lyh1024/p/16720908.html Ø 冒泡排序原理: 比较数组中, ...

随机推荐

  1. Android中为何使用Log而不用System.out

    Android中为何使用Log而不用System.out System.out除了使用方便一点以外有以下缺点:日志不可控制,打印时间无法确定,不能添加过滤器,日志没有级别之分. 使用Log比如想打印一 ...

  2. Nginx+Tomcat多实例及负载均衡配置

    Nginx+Tomcat多实例及负载均衡配置 采用nginx的反向代理负载均衡功能,配合后端的tomcat多实例来实现tomcat WEB服务的负载均衡 01 安装nginx服务 安装所需的pcre库 ...

  3. useRef获取DOM元素和保存变量(十)

    useRef在工作中虽然用的不多,但是也不能缺少.它有两个主要的作用: 用useRef获取React JSX中的DOM元素,获取后你就可以控制DOM的任何东西了.但是一般不建议这样来作,React界面 ...

  4. C#多线程和异步——Task和async/await详解

    阅读目录 一.什么是异步 二.Task介绍 1 Task创建和运行 2 Task的阻塞方法(Wait/WaitAll/WaitAny) 3 Task的延续操作(WhenAny/WhenAll/Cont ...

  5. ISO/IEC 9899:2011 条款6.8——语句和语句块

    6.8 语句和语句块 语法 1.statement: labeled-statement compound-statement         expression-statement         ...

  6. IDEA使用tomcat插件

    在实际项目开发中,特别是分布式项目,往往有N多个子项目需要同时启动测试. 这一切靠本地安装的tomcat是远远不够的,而且繁琐. 这里就需要用到tomca插件. 在pom.xml中引入: <bu ...

  7. 0.9.0.RELEASE版本的spring cloud alibaba nacos+gateway网关实例

    gateway就是用来替换zuul的,功能都差不多,我们看下它怎么来跟nacos一起玩.老套路,三板斧: 1.pom: <?xml version="1.0" encodin ...

  8. Python - Django - 封装分页成通用的模块

    新建 utils 文件夹,并创建 page.py page.py: class ShowPage(object): def __init__(self, page_num, total_count, ...

  9. 改进初学者的PID-修改整定参数

    最近看到了Brett Beauregard发表的有关PID的系列文章,感觉对于理解PID算法很有帮助,于是将系列文章翻译过来!在自我提高的过程中,也希望对同道中人有所帮助.作者Brett Beaure ...

  10. Windows2008R2+iis7.5环境下的dz论坛X3版伪静态设置教程

    Windows2008R2+iis7.5环境下的dz论坛X3版伪静态设置教程 因为2008R2不是那么的普及,加上X3版新出不久,所以伪静态的设置教程比较少,今天搞出来了,其实很简单,那么下面给大家简 ...