Java成神之路:第二帖---- 数据结构与算法之稀疏数组
数据结构与算法--稀疏数组
转换方法
记录数组有几行几列,有多少个不同的值
把不同的值的元素的行列,记录在一个小规模的数组中,以此来缩小数组的规模
如图:

二维数组转稀疏数组
- 对原始的二维数组进行遍历,并得到有效的数据个数(这里用sum表示)
- 根据sum的个数,创建稀疏数组
sparseArr int[sum+1][3] - 将二维数组的有效数据存入到稀疏数组中
PS:sum+1是因为稀疏数组的第一行存放的是数组的行列数以及有效数值个数

稀疏数组转二维数组
- 先读取稀疏数组中的第一行,并且根据稀疏数组中第一行的数据,创建原始的二维数组
int num1,num2;
num1 = sparseArr[0][0];
num2 = sparseArr[0][1];
chessArr int[num1][num2] = new int[num1][num2];
- 读取稀疏数组后面几行的数据,并且一一赋值给原始的二维数组
代码实现
输出原始数组
public static void main(String[] args) {
//创建原始数组
//1代表黑子,2代表白子
int[][] chessArr = new int[11][11];
chessArr[1][2] = 1;
chessArr[2][3] = 2;
for (int[] items: chessArr) {
for (int data: items) {
System.out.print(data+"\t");
}
System.out.println();
}
}
结果如下:

转换稀疏数组并输出
public static void main(String[] args) {
//创建原始数组
//1代表黑子,2代表白子
int[][] chessArr = new int[11][11];
chessArr[1][2] = 1;
chessArr[2][3] = 2;
//sum用来记录不为0的数值个数
int sum=0;
for (int[] items: chessArr) {
for (int data: items) {
if(data != 0){
sum++;
}
System.out.print(data+"\t");
}
System.out.println();
}
//原始数组转逻辑数组
//1、找出数值不为0的元素个数
int[][] sparseArr =new int[sum+1][3];
//chessArr.length代表行的长度
//chessArr[0].length代表列的长度
sparseArr[0][0]=chessArr.length;
sparseArr[0][1]=chessArr[0].length;
sparseArr[0][2]=sum;
//第一行以后的稀疏数组的数据
int count = 0; //count用来统计是第几个不为0的数
for(int i=0;i<11;i++){
for(int j=0;j<11;j++){
if(chessArr[i][j] != 0){
count++;
sparseArr[count][0]=i;
sparseArr[count][1]=j;
sparseArr[count][2]=chessArr[i][j];
}
}
}
//输出稀疏数组
for (int[] items: sparseArr) {
for (int data: items) {
System.out.print(data+"\t");
}
System.out.println();
}
}
其结果如下

稀疏数组转换会原数组
//将稀疏数组还原
//1、通过第一行的稀疏数组数值,建立原始二维数组
int[][] chessArr1 = new int[sparseArr[0][0]][sparseArr[0][1]];
//2、将稀疏数组的值赋值给原始数组
for(int i=1;i<sparseArr.length;i++){
//将稀疏数组中的第i行的第1/2分别取出作为原始数组的行和列,第三个值作为原始数组的值
chessArr1[sparseArr[i][0]][sparseArr[i][1]]=sparseArr[i][2];
}
//转换后的原始数组输出
for (int[] items: chessArr1) {
for (int data: items) {
System.out.print(data+"\t");
}
System.out.println();
}
其结果如下:

好啦~
今天的更新到此结束
下次再更新其他文章哦~
Java成神之路:第二帖---- 数据结构与算法之稀疏数组的更多相关文章
- Java成神之路[转]
阿里大牛珍藏架构资料,点击链接免费获取 针对本文,博主最近在写<成神之路系列文章> ,分章分节介绍所有知识点.欢迎关注. 主要版本 更新时间 备注 v1.0 2015-08-01 首次发布 ...
- Java成神之路:第三帖----数据结构与算法之队列
数据结构与算法--队列 今天掉了两根头发,摸掉的,记得 别乱摸,很珍贵的!! 什么是队列? 1)队列是一个有序列表,可以用数组或是链表来实现 2)遵循 先入先出 的原则.即:先存入队列的数据,要先取出 ...
- Java成神之路:第一帖---- Vue的组件属性components用法
Vue的组件属性:components 使用场景 一般在项目的使用过程中,某个需要多次使用的模块,会将整个模块抽取出来,写一个组件,供给其他页面进行调用或者是在一个页面中,多次使用到一个重复的代码样式 ...
- java 成神之路
一.基础篇 1.1 JVM 1.1.1. Java内存模型,Java内存管理,Java堆和栈,垃圾回收 http://www.jcp.org/en/jsr/detail?id=133 http://i ...
- Java成神之路技术整理(长期更新)
以下是Java技术栈微信公众号发布的关于 Java 的技术干货,从以下几个方面汇总. Java 基础篇 Java 集合篇 Java 多线程篇 Java JVM篇 Java 进阶篇 Java 新特性篇 ...
- Java成神之路技术整理
关于 Java 的技术干货,从以下几个方面汇总. Java 基础篇 Java 集合篇 Java 多线程篇 Java JVM篇 Java 进阶篇 Java 新特性篇 Java 工具篇 Java 书籍篇 ...
- java成神之路
一.基础篇 1.1 JVM 1.1.1. Java内存模型,Java内存管理,Java堆和栈,垃圾回收 http://www.jcp.org/en/jsr/detail?id=133 http://i ...
- 转:Java工程师成神之路~(2018修订版)
转: http://www.hollischuang.com/archives/489 阿里大牛珍藏架构资料,点击链接免费获取 针对本文,博主最近在写<成神之路系列文章> ,分章分节介绍所 ...
- 【转】Java工程师成神之路
针对本文,博主最近在写<成神之路系列文章> ,分章分节介绍所有知识点.欢迎关注. 一.基础篇 1.1 JVM 1.1.1. Java内存模型,Java内存管理,Java堆和栈,垃圾回收 h ...
随机推荐
- 下面POM插件的作用是转换包名,修改tomcat跳转端口
<plugin> <groupId>org.apache.tomcat.maven</groupId> <artifactId>tomcat6-mave ...
- SpringBoot ---yml 整合 Druid(1.1.23) 数据源
SpringBoot ---yml 整合 Druid(1.1.23) 数据源 搜了一下,网络上有在配置类写 @Bean 配置的,也有 yml 配置的. 笔者尝试过用配置类配置 @Bean 的方法,结果 ...
- 浏览器自动化的一些体会6 增强的webBrowser控件
这里谈两点 1.支持代理服务器切换 一种方法是修改注册表,不是太好的做法,而且,只能改全局设置,不能改局部(比如只让当前的webBrowser控件使用代理,而其他应用不用代理) 另外一个较好的方法,示 ...
- Js中的各种高度问题
一.屏幕宽高相关 屏幕高度就是你的整个屏幕高度(开机会亮的那片区域的高度),相关的其他高度划分很简单,就是以任务栏为分界线从而分为两部分. screen.height :屏幕高度. screen.wi ...
- SSH 加固指南
本文翻译自:A Guide to Securing the SSH Daemon SSH(Secure Shell)是一种能够让用户安全访问远程系统的网络协议,它为不安全网络中的两台主机提供了一个强加 ...
- NOSQL基础
一.mongoDB介绍和使用 1.分布式文件储存数据库,使用C++开发的,可以存储任意数据(文件),允许在服务器端执行脚本,使用JSON形式储存数据{key:value} 2.支持的编程语言有:PHP ...
- <抽奖奇遇>
时间如同指间沙一般,转眼间一个月就过去了,今天是出去抽奖的日子,这种事情本来性格就淡漠的我不想去参和,怎奈老爸非让我去,我也感到很是无奈.我的运气一直都不好,所以就没抱什么希望,就当是出门去看看热闹 ...
- Go Channel 详解
原文链接:Go Channel 详解 Channel类型 Channel类型的定义格式如下: ChannelType = ( "chan" | "chan" & ...
- zookeeper简单实现注册与发现以及其他基本操作
添加依赖 <dependency> <groupId>org.apache.zookeeper</groupId> <artifactId>zookee ...
- Java数据结构——AVL树
AVL树(平衡二叉树)定义 AVL树本质上是一颗二叉查找树,但是它又具有以下特点:它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树,并且拥有自平衡机制.在AV ...