Java数组07——稀疏数组
稀疏数组
总结:
记录有效的坐标: 记录原始做表的大小和有效值的个数
记录每一个有效值的坐标 ,变成一个新的数组
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——稀疏数组的更多相关文章
- 图解Java数据结构之稀疏数组
在编程中,算法的重要性不言而喻,没有算法的程序是没有灵魂的.可见算法的重要性. 然而,在学习算法之前我们需要掌握数据结构,数据结构是算法的基础. 我在大学的时候,学校里的数据结构是用C语言教的,因为对 ...
- java基础——多维数组和稀疏数组
多维数组 多维数组可以堪称数组的数组,比如二维数组就是一个特殊的一维数组,其中每一个元素都是一个以为数组 而且数组 int a[][]= new int[2][3]; public class Arr ...
- Java数据结构之稀疏数组(Sparse Array)
1.需求 编写的五子棋程序中,有存盘退出和续上盘的功能.因为该二维数组的很多值是默认值0,因此记录了很多没有意义的数据,为了压缩存储所以采用稀疏数组. 2.基本介绍 当一个数组中大部分元素为0,或者为 ...
- 二维数组转稀疏数组、稀疏数组恢复二维数组(Java实现)
public static void main(String[] args) { // 创建一个原始的二维数组 9*9 int chessArr1[][] = new int[9][9]; // 0表 ...
- 二维数组与稀疏数组的转换---dataStructures
首先我们看一个需求 在11 * 11 的五子棋的棋盘中 我们使用0代表十字交叉点也是无效的数据 用1代表黑棋 用2代表蓝棋 那么所看到的棋盘如下 改用数字显示后就如一下样式 现在我们需要将怎个棋盘存储 ...
- new Array(n) 的坑 密集数组和稀疏数组
今天写Vue时遇到一个奇怪问题,需要监控网页上的input 是否都有值 // var blanks = new Array(number); // blanks的监控属性 var emptyNumbe ...
- 【学习总结】java数据结构和算法-第三章-稀疏数组和队列
相关链接 [学习总结]尚硅谷2019java数据结构和算法 github:javaDSA 目录 稀疏数组 队列 稀疏数组 稀疏数组介绍 图示 应用实例 代码实现 SparseArray.java:与二 ...
- java算法--稀疏数组
数据结构必要知识 线性结构 线性结构是最常用的数据结构,数据元素之间存在一对一的线性关系. 线性结构有两种不同的存储结构,即顺序存储结构和链式存储结构.顺序存储的线性表称为顺序表,顺序表中的存储元素是 ...
- Java的稀疏数组的简单代码实现
目录 Java的稀疏数组的简单代码实现 一.稀疏数组的基本概念 二.稀疏数组的Java代码实现思路 三.稀释数组的Java代码实现 四.结语 Java的稀疏数组的简单代码实现 一.稀疏数组的基本概念 ...
随机推荐
- gRPC(2):四种基本通信模式
在 gRPC(1):入门及简单使用(go) 中,我们实现了一个简单的 gRPC 应用程序,其中双方通信是简单的请求-响应模式,没发出一个请求都会得到一个响应,然而,借助 gRPC 可以实现不同的通信模 ...
- kustomize简单使用
1.背景 在Kubernetes v1.14版本的发布说明中,kustomize 成为了 kubectl 内置的子命令,并说明了 kustomize 使用 Kubernetes 原生概念帮助用户创作并 ...
- AWS上的EFK环境部署
1.准备工作及组件 本章使用自建服务以及aws服务来配置使用. 服务 版本 作用 filebeat 6.7.2→ 7.3.1 节点日志收集,只完成少量比如多行合并工作 logstash 6.4.2→7 ...
- 关于安装运行MYSQL8.0简单使用及注意事项 On Docker Desktop & WSL2
背景介绍 MYSQL是业界非常流行的一款关系型数据库系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性.MySQL所使用的SQL语言是用于访问数据 ...
- 关于.Net Core使用Elasticsearch(俗称ES)、Kibana的研究说明
关于ElasticSearch Elasticsearch是一个分布式的开源搜索和分析引擎,适用于所有类型的数据,包括文本.数字.地理空间.结构化和非结构化数据.Elasticsearch 在 Apa ...
- 一文带你了解.Net信号量
本文主要讲解.Net基于Semaphore带大家了解信号量 信号量举例 大家去银行去银行取钱,互斥锁管理的时一个柜台是否正在处理业务,而信号量管理的是整个柜台是否正在处理业务,每当有一个柜台处理完成之 ...
- 11、linux的目录结构
11.1.查看磁盘的id: blkid 11.2.linux目录类似一个倒挂的树: / 是所有目录的顶点,目录磁盘和分区是没有关联的,因此/下不同的目录会对应不同的磁盘的不同的分区: linux中硬盘 ...
- 本地无法访问虚拟机的tomcat
查看 firewalld防火墙 是否开启 命令: firewall-cmd --state 如果是 running 关闭 firewalld防火墙命令: service firewalld stop ...
- NoSql非关系型数据库之MongoDB应用(三):MongoDB在项目中的初步应用
业精于勤,荒于嬉:行成于思,毁于随. 我们可以结合相关的IDE做一个简单的增删改查了,实现MongoDB在项目中的初步应用. 前提是安装了MongoDB服务和MongoDB可视化工具,没有安装的可以点 ...
- SpringCloud:Zuul路由配置超时问题
测试访问时长 修改下业务类,增加sleep休眠时长,以此查看Zuul的熔断 @GetMapping("/test1") public Object test1() { try { ...