数据结构与算法--稀疏数组

转换方法

  1. 记录数组有几行几列,有多少个不同的值

  2. 把不同的值的元素的行列,记录在一个小规模的数组中,以此来缩小数组的规模

    如图:


二维数组转稀疏数组

  1. 对原始的二维数组进行遍历,并得到有效的数据个数(这里用sum表示)
  2. 根据sum的个数,创建稀疏数组 sparseArr int[sum+1][3]
  3. 将二维数组的有效数据存入到稀疏数组中

    PS:sum+1是因为稀疏数组的第一行存放的是数组的行列数以及有效数值个数


稀疏数组转二维数组

  1. 先读取稀疏数组中的第一行,并且根据稀疏数组中第一行的数据,创建原始的二维数组
     int num1,num2;
    num1 = sparseArr[0][0];
    num2 = sparseArr[0][1];
    chessArr int[num1][num2] = new int[num1][num2];
  2. 读取稀疏数组后面几行的数据,并且一一赋值给原始的二维数组

代码实现

输出原始数组

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成神之路:第二帖---- 数据结构与算法之稀疏数组的更多相关文章

  1. Java成神之路[转]

    阿里大牛珍藏架构资料,点击链接免费获取 针对本文,博主最近在写<成神之路系列文章> ,分章分节介绍所有知识点.欢迎关注. 主要版本 更新时间 备注 v1.0 2015-08-01 首次发布 ...

  2. Java成神之路:第三帖----数据结构与算法之队列

    数据结构与算法--队列 今天掉了两根头发,摸掉的,记得 别乱摸,很珍贵的!! 什么是队列? 1)队列是一个有序列表,可以用数组或是链表来实现 2)遵循 先入先出 的原则.即:先存入队列的数据,要先取出 ...

  3. Java成神之路:第一帖---- Vue的组件属性components用法

    Vue的组件属性:components 使用场景 一般在项目的使用过程中,某个需要多次使用的模块,会将整个模块抽取出来,写一个组件,供给其他页面进行调用或者是在一个页面中,多次使用到一个重复的代码样式 ...

  4. java 成神之路

    一.基础篇 1.1 JVM 1.1.1. Java内存模型,Java内存管理,Java堆和栈,垃圾回收 http://www.jcp.org/en/jsr/detail?id=133 http://i ...

  5. Java成神之路技术整理(长期更新)

    以下是Java技术栈微信公众号发布的关于 Java 的技术干货,从以下几个方面汇总. Java 基础篇 Java 集合篇 Java 多线程篇 Java JVM篇 Java 进阶篇 Java 新特性篇 ...

  6. Java成神之路技术整理

    关于 Java 的技术干货,从以下几个方面汇总. Java 基础篇 Java 集合篇 Java 多线程篇 Java JVM篇 Java 进阶篇 Java 新特性篇 Java 工具篇 Java 书籍篇 ...

  7. java成神之路

    一.基础篇 1.1 JVM 1.1.1. Java内存模型,Java内存管理,Java堆和栈,垃圾回收 http://www.jcp.org/en/jsr/detail?id=133 http://i ...

  8. 转:Java工程师成神之路~(2018修订版)

    转: http://www.hollischuang.com/archives/489 阿里大牛珍藏架构资料,点击链接免费获取 针对本文,博主最近在写<成神之路系列文章> ,分章分节介绍所 ...

  9. 【转】Java工程师成神之路

    针对本文,博主最近在写<成神之路系列文章> ,分章分节介绍所有知识点.欢迎关注. 一.基础篇 1.1 JVM 1.1.1. Java内存模型,Java内存管理,Java堆和栈,垃圾回收 h ...

随机推荐

  1. python中操作csv文件

    python中操作csv文件 读取csv improt csv f = csv.reader(open("文件路径","r")) for i in f: pri ...

  2. JavaScript学习系列博客_34_JavaScript RegExp对象

    RegExp 对象 RegExp 对象表示正则表达式,它是对字符串执行模式匹配的强大工具. 创建 RegExp 对象的语法(构造函数方式): pattern:正则表达式,attributes:匹配模式 ...

  3. js的事件循环和任务队列

    js 异步.栈.事件循环.任务队列 在开发中经常遇到js的异步问题,为了方便理解,记录下来,随时回顾. 以下的所有代码都是在浏览器环境下运行 在浏览器中js的运行是依赖浏览器js引擎来解析的,并且是在 ...

  4. Chrome扩展应用Postman地址(直接搜是搜不到的)

    https://chrome.google.com/webstore/detail/postman/fhbjgbiflinjbdggehcddcbncdddomop

  5. MySQL数据库修改字段名、字段类型、字段长度

    1.MySQL数据库中,修改字段SQL如下: alter table AppVersion change version versionCode varchar() DEFAULT NULL COMM ...

  6. 第4篇scrum冲刺(5.24)

    一.站立会议 1.照片 2.工作安排 成员 昨天已完成的工作 今天的工作安排 困难 陈芝敏  完成云开发配置,初始化数据库:  线下模块(还剩下获取词的数据库) 倒计时模块的初加载还是有点慢  冯晓凤 ...

  7. [转]camera教程

    camera教程 Lens一般由几片透镜组成透镜结构,按材质可分为塑胶透镜(plastic)或玻璃透镜(glass),玻璃镜片比树脂镜片贵.塑胶透镜其实是树脂镜片,透光率和感光性等光学指标比不上镀膜镜 ...

  8. 使用 Swift Package Manager 集成依赖库

      本文首发于 Ficow Shen's Blog,原文地址: 使用 Swift Package Manager 集成依赖库.   内容概览 前言 添加依赖包 在项目中使用依赖 管理已导入的依赖 在团 ...

  9. 从零开始的SpringBoot项目 ( 八 ) 实现基于Token的用户身份验证

    1.首先了解一下Token uid: 用户唯一身份标识 time: 当前时间的时间戳 sign: 签名, 使用 hash/encrypt 压缩成定长的十六进制字符串,以防止第三方恶意拼接 固定参数(可 ...

  10. 学习seo赚钱一定要有超前的思路和眼光

    http://www.wocaoseo.com/thread-100-1-1.html        日子过的真是快,一天又一天,一年又一年,虽然过年的脚步将近,火车票的问题还是没有解决,昨天忙活了半 ...