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

转换方法

  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. nodejs版本DESede/CBC/PKCS5Padding算法封装(3des)

    最近对接了一个第三方支付项目,用的加密算法是根本没听过的:DESede/CBC/PKCS5Padding 这个算法真的是坑爹了,网上搜索了一堆只有java版本是正常的,nodejs版本的各种问题,我了 ...

  2. 数据 恢复----判断Raid盘序及校验方向

    重组Raid(如何判断校验方向及盘序) 1. 常规左异结构[backward parity(反向奇偶校验--(静态))] 校验块:校验块从最后一块物理盘开始写起,然后依次往前面的盘中写入,当写到第一块 ...

  3. NOSQL基础

    一.mongoDB介绍和使用 1.分布式文件储存数据库,使用C++开发的,可以存储任意数据(文件),允许在服务器端执行脚本,使用JSON形式储存数据{key:value} 2.支持的编程语言有:PHP ...

  4. java+opencv人脸识别程序2.0

    由于第一次写的太粗糙了,所以又修改了一下,详细的更改如下: @ 目录 更改 窗口问题 识别问题 相似度对比 仍然存在的问题 人脸信息显示 图片质量 更改 优化了一下界面风格 窗口问题 原来是在主界面外 ...

  5. SSM框架整合练习——一个简单的文章管理系统

    使用SSM框架搭建的简易文章管理系统,实现了简单的增删改查功能. @ 目录 开发工具版本: 最终的项目结构 IDEA+Maven搭建项目骨架 1. 新建Maven项目: 2. 在新建的项目中添加所需要 ...

  6. ceph scrub error解决方案

    参考链接:https://blog.csdn.net/u010317005/article/details/79242794 问题现象: 原因分析: 数据的不一致性(inconsistent)指对象的 ...

  7. Federated Machine Learning: Concept and Applications

    郑重声明:原文参见标题,如有侵权,请联系作者,将会撤销发布! Qiang Yang, Yang Liu, Tianjian Chen, and Yongxin Tong. 2019. Federate ...

  8. pandas - 异常值处理

    异常值概念:是指那些远离正常值的观测,即“不合群”观测.异常值的出现一般是人为的记录错误或者是设备的故障等,异常值的出现会对模型的创建和预测产生 严重的后果.当然异常值也不一定是坏事,有些情况下,通过 ...

  9. ominigraffle实践之画精美流程图+自动导出Xcode工程类图

    背景 在平常阅读各种文章时,注意到有的文章中流程图做得特别漂亮.特别羡慕.于是去搜索了下,发现mac平台好评很高的是一款名为ominigraffle的软件.这款软件不仅可以画图,还可以导出Xcode工 ...

  10. 更好地使用google

    精确搜索:双引号 精确搜索就是在你要搜索的词上,加上双引号,这时google就会完全的匹配你所要搜索的字符串 "今日黄瓜" 站内搜索:site 例如我想在stackoverflow ...