稀疏数组

总结:

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

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

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. 滑动窗口经典题 leetcode 3. 无重复字符的最长子串

    题目 解题思路 题目要求找出给定字符串中不含有重复字符的最长子串的长度.这是一个典型的滑动窗口的题目,可以通过滑动窗口去解答. 滑动窗口 具体操作如下图示:找到一个子串 s[left...right] ...

  2. 27、路由 route

    优先于网卡中的配置,但是重启或重启网卡失效,最好加入到开机自启动服务中/etc/rc.local文件中: 27.1.添加网络路由: 目的网络.目的网络掩码,网关.网卡: 网络寻址以路由表中的路由优先: ...

  3. echarts 根据geojson 数据绘制区域图(精确到镇)

    步骤:1)先获取区域(县.镇)json数据 :2)使用echarts 绘制地图: 先上一波效果图(昆明市东川区) 一.获取区域json数据 1.下载工具"水经微图", 2.下载东川 ...

  4. Object 中的默认方法

    1.public final native Class<?> getClass() getClass方法,返回该实例的java.lang.Class类,例如 Object obj = ne ...

  5. 『无为则无心』Python函数 — 27、Python函数的返回值

    目录 1.返回值概念 2.return关键字的作用 3.返回值可以返回的数据类型 4.函数如何返回多个值 5.fn5 和 fn5()的区别 6.总结: 1.返回值概念 例如:我们去超市购物,比如买饮料 ...

  6. Hystrix 使用说明

    1.什么情况下会触发 fallback 方法 名字 描述 触发fallback EMIT 值传递 NO SUCCESS 执行完成,没有错误 NO FAILURE 执行抛出异常 YES TIMEOUT ...

  7. ROS2学习之旅(2)——配置ROS2环境

    目录 1.source一下setup文件 2.自动source 3.自动进入工作区(不常用) 4.检查环境变量是否设置成功 5.总结 ROS2依赖于使用shell(终端)环境组合工作空间的概念.工作空 ...

  8. Spark的安装和使用

    根据Spark2.1.0入门:Spark的安装和使用在虚拟机安装Spark,并进行测试 实验3  Spark读取文件系统的数据 将文件上传hdfs (1)在spark-shell中读取Linux系统本 ...

  9. 【剑指offer】05. 替换空格

    剑指 Offer 05. 替换空格 知识点:: 题目描述 请实现一个函数,把字符串 s 中的每个空格替换成"%20". 示例 输入:s = "We are happy.& ...

  10. Python (paramiko) 连接Linux服务器

    目录 参考资料 Paramiko 安装 连接Linux 文件上传/下载 文件封装 其他 参考资料 https://www.liujiangblog.com/blog/15/ https://blog. ...