稀疏数组

总结:

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

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

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. 二、JavaSE语言基础之常量与变量

    1.常量   所谓常量值的是数据处理过程中值不能更改的数据. 2.变量   所谓变量值的是运算过程中值可以改变的数据,类似于代数中的未知数.   在Java语言中,使用变量时必须遵循先定义,而后赋值, ...

  2. C++ 11 关键字

    1.auto 我现在用auto,基本是在变量定义时根据初始化表达式自动推断该变量的类型. 另外与关键字 decltype 连用,在声明或定义函数时作为函数返回值的占位符. auto不能用来声明函数的返 ...

  3. ps 快速去掉不需要的部分

    1.打开图片---使用套索工具将不需要的圈起来----右键填充--直接点击确定就可以了

  4. Docker搭建Prometheus+grafana监控系统

    一.Prometheus简介 1.简介 Prometheus是由SoundCloud开发的开源监控报警系统和时序列数据库(TSDB). Prometheus使用Go语言开发,是Google BorgM ...

  5. Docker:docker部署PXC-5.7.21(mysql5.7.21)集群搭建负载均衡实现双机热部署方案

    单节点数据库弊端 大型互联网程序用户群体庞大,所以架构必须要特殊设计 单节点的数据库无法满足性能上的要求 单节点的数据库没有冗余设计,无法满足高可用 推荐Mysql集群部署方案 PXC (Percon ...

  6. Shell中[和[[的异同

    1.     概念上来说 "[[",是关键字,许多shell(如ash bsh)并不支持这种方式.ksh, bash(据说从2.02起引入对[[的支持)等支持."[&qu ...

  7. WPF DataGrid RowDetailsTemplate 鼠标滚动通知到 DataGrid 滚动

    前言:上次做了数据驱动UI虽然已经实现,但是在明细中鼠标滚动并不能带动外部 DataGrid 滚动条滚动,上文地址  https://www.cnblogs.com/luguangguang/p/14 ...

  8. ABP Framework 为什么好上手,不好深入?探讨最佳学习姿势!

    离写上一篇经验总结 ABP Framework 研习社经验总结(6.28-7.2) ,已经过去两周. ABP Framework 研习社(QQ群:726299208) 最近一周,又迎来了很多新伙伴,成 ...

  9. Nginx的安装和部署

    Nginx简介 Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行.其特点是占有内存少,并发能力强,事实上nginx的并发 ...

  10. 「AGC020D」 Min Max Repetition

    「AGC020D」 Min Max Repetition 传送门 首先这个东西的连续字符个数你可以二分.但事实上没有必要,这是可以直接算出来的. 即 \(k=\max\{\lceil\frac{A}{ ...