稀疏数组

总结:

记录有效的坐标: 记录原始做表的大小和有效值的个数

记录每一个有效值的坐标 ,变成一个新的数组

age:
 package array;
 ​
 public class ArrayDemon09 {
     public static void main(String[] args) {
         //1. 创建一个二维数组 11*11 0:没有棋子 1: 黑棋
         int[][] array1=new int[11][11];
         array1[1][2]=1;
         array1[2][3]=2;
         //输出原始数组
         System.out.println("输出原始数组:");
         for (int i = 0; i <array1.length ; i++) {
             for (int j = 0; j < array1.length; j++) {
                 System.out.print(array1[i][j]+"\t");
            }
             System.out.println("\n");
        }
         //转化为稀疏数组保存
         //获取有效值的个数
         int sum=0;
         for (int i = 0; i < 11; i++) {
             for (int j = 0; j < 11; j++) {
                 if(array1[i][j] !=0 ){
                     sum++;
                }
            }
        }
         System.out.println("有效值的个数:"+sum);
 ​
         //2. 创建一个稀疏数组
         //                     行数   列数固定为3
         int[][] array2=new int[sum+1][3];
         //首行赋值
         array2[0][0]=11;//行数
         array2[0][1]=11;//列数
         array2[0][2]=sum;//有效值个数
 ​
         //遍历二维数组,将非0值 存放在稀疏数组中
         int count=0;
         for (int i = 0; i < array1.length; i++) {
             for (int j = 0; j < array1.length; j++) {
                 if(array1[i][j] != 0){
                     count++;
                     //第二行往下的每一排
                     array2[count][0]=i;//横坐标
                     array2[count][1]=j;//纵坐标
                     array2[count][2]=array1[i][j];//赋值
                     /*
                输出稀疏数组:
                          行 列 值
                          11 11 2 11*11 有效个数为2
                          1 2 1
                          2 3 2
                      */
                }
            }
        }
         System.out.println("=========================");
 ​
         // 输出稀疏数组
         System.out.println("输出稀疏数组:");
         for (int i = 0; i < array2.length; i++) {
             System.out.println(array2[i][0]+"\t"//行位置
             +array2[i][1]+"\t"//列位置
             +array2[i][2]+"\t");//所存的值
        }
         System.out.println("==================");
         System.out.println("还原稀疏数组:");
         //1. 读取稀疏数组的值
         int[][] array3=new int[array2[0][0]][array2[0][1]]; //还原数组的大小(11*11-----相当于int[11][11])
         //2. 给其中的元素还原它的值
         for (int i = 1; i < array2.length; i++) {//从1开始   头部不用赋值
             array3[array2[i][0]][array2[i][1]]= array2[i][2];
        }
         //打印
         System.out.println("输出还原的数组:");
         for (int i = 0; i < array3.length; i++) {
             for (int j = 0; j < array3.length; j++) {
                 System.out.print(array3[i][j]+"\t");
            }
             System.out.println("\n");
        }
 ​
    }
 }
 ​

学习内容源自视频:b站狂神说Java

Java数组07——稀疏数组的更多相关文章

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

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

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

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

  3. Java数据结构之稀疏数组(Sparse Array)

    1.需求 编写的五子棋程序中,有存盘退出和续上盘的功能.因为该二维数组的很多值是默认值0,因此记录了很多没有意义的数据,为了压缩存储所以采用稀疏数组. 2.基本介绍 当一个数组中大部分元素为0,或者为 ...

  4. 二维数组转稀疏数组、稀疏数组恢复二维数组(Java实现)

    public static void main(String[] args) { // 创建一个原始的二维数组 9*9 int chessArr1[][] = new int[9][9]; // 0表 ...

  5. 二维数组与稀疏数组的转换---dataStructures

    首先我们看一个需求 在11 * 11 的五子棋的棋盘中 我们使用0代表十字交叉点也是无效的数据 用1代表黑棋 用2代表蓝棋 那么所看到的棋盘如下 改用数字显示后就如一下样式 现在我们需要将怎个棋盘存储 ...

  6. new Array(n) 的坑 密集数组和稀疏数组

    今天写Vue时遇到一个奇怪问题,需要监控网页上的input 是否都有值 // var blanks = new Array(number); // blanks的监控属性 var emptyNumbe ...

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

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

  8. java算法--稀疏数组

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

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

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

随机推荐

  1. excel函数提取内容中的汉字

    RIGHT(A2,LENB(A2)-LEN(A2)) 函数LENB将每个汉字(双字节字符)的字符数按2计数,LEN函数则对所有的字符都按1计数.因此"LENB(A2)-LEN(A2)&quo ...

  2. 2、mysql编译安装

    2.1前言: 此文档介绍的是cmake编译安装的方式: 二进制的安装方式在linux运维_集群_01中有详细的安装说明(已经编译完成,进行初始操作即可) 初始化操作时需要对编译好的mysql进行一下备 ...

  3. 13、windows下卸载oracle

    13.1.停用oracle服务: 进入计算机管理,在服务中,找到oracle开头的所有服务,右击选择停止: 13.2.删除oracle: 在开始菜单中,找到oracle->Universal I ...

  4. 关于 C#的一些记录

    1, 注意: 使用Linq to Sql 查询数据库的时候,进行where 判断需要注意.我使用的EF,以下为我的记录使用Contain 需要 使用 *.Contains("" + ...

  5. Vue style与css的var()

    vue绑定style直接给css的var变量传递一个值,然后结合css的var()函数使用这个值. 在data里面定义一个变量然后给定一个值,后期修改这个值之后,所有依赖这个变量的css样式都会被响应 ...

  6. Spring:Spring事务手动回滚方式

    方法1: 在service层方法的catch语句中增加:TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();语句 ...

  7. 性能基准DevOps之如何提升脚本执行效率

    1.宝路说 宝路最近一直在自我思考:性能基准DevOps工作已经开展一段时间了,目前我们确实已经取得了一些成果,显然这还远远不够.趁闲暇之余跟组员进行了简单的头脑风暴!于是这就有了今天的主题,当然这仅 ...

  8. postgresql安装及配置

    目录 1. 安装 2. PostgrepSQL的简单配置 2.1 修改监听的ip和端口 2.2 修改数据库log相关的参数 2.3 内存参数 3. 数据库的基础操作 3.1 连接数据库控制台 3.2 ...

  9. Git远程操作详解(clone、remote、fetch、pull、push)

    https://blog.csdn.net/u013374164/article/details/79091677 Git是目前最流行的版本管理系统,学会Git几乎成了开发者的必备技能. Git有很多 ...

  10. Rust安装-运行第一个程序-hello_world

    Rust官网:https://rust-lang.org/ 安装 点击install,选择版本 选择相对应的版本进行下载 我这里下载的是windows系统,运行下载好的exe文件,根据需要选择选对应的 ...