首先我们看一个需求

在11 * 11 的五子棋的棋盘中 我们使用0代表十字交叉点也是无效的数据 用1代表黑棋 用2代表蓝棋

那么所看到的棋盘如下



改用数字显示后就如一下样式



现在我们需要将怎个棋盘存储起来,但是又发现有很多为0 的无效数据,那么我们就需要考虑将有效的数据存储无效的数据不用存储起来

这样我们就可以使用稀疏数组将数据存储起来

稀疏数组

稀疏数组有一定会有三行,列是随有效数据的个数而变化的,先看一个稀疏数组的大概样子

二维数组转换为稀疏数组的思路

  • 第一部 需要遍历稀疏数组,获取有效数据的个数(sum),改个数可以用来确定稀疏数组的行数,那么稀疏数组的行数就是(sum + 1)【因为稀疏数组的第一行是原始二维数组已经确定好了的】
//统计原始二维数组中的有效数据的个数,sum代表二维数组中有效数据的个数
int sum = 0;
for (int i = 0; i < chessArr.length; i++) {
for (int j = 0; j < chessArr.length; j++) {
if (chessArr[i][j] != 0){
sum++;
}
}
}
System.out.println("有效数据的个数为:" + sum);
  • 第二部 创建一个稀疏数组 int[][] sparseArr[sum +1 ][3]
        //1. 创建稀疏数组
int sparseArr[][] = new int[sum + 1][3];
  • 第三部 遍历稀疏数组中的有效数据的索引和值,并将有效数据存入稀疏数组中
         //给稀疏数组的第一行复制
sparseArr[0][0] = 11;
sparseArr[0][1] = 11;
sparseArr[0][2] = sum; --sum(有效数据的个数)
//2. 给稀疏数组赋值,count用于计数,计算该稀疏数组的第几行
int count = 0;
for (int i = 0; i < chessArr.length; i++) {
for (int j = 0; j < chessArr.length; j++) {
if (chessArr[i][j] != 0){
count++;
sparseArr[count][0] = i;
sparseArr[count][1] = j;
sparseArr[count][2] = chessArr[i][j];
}
}
}

稀疏数组转换为二维数组的思路

  • 第一部 读取稀疏数组的第一行,利用第一行的数据,创建出没有有效数据的二维数组 reChessArr = int[sparseArr[0][0]][sparseArr[0][1]];

    int reChessArr[][] = new int[sparseArr[0][0]][sparseArr[0][1]];
  • 第二部 遍历稀疏数组的后几行数据,并且赋值给 reChessArr, 这样就还原了有数据的二维数组
       //给还原后的二维数组赋值
for (int i = 1; i < sparseArr.length; i++) {
reChessArr[sparseArr[i][0]][sparseArr[i][1]] = sparseArr[i][2];
}

全部代码地址

码云(gitee): dataStructures-sparseArray

github: dataStructures-sparseArray

二维数组与稀疏数组的转换---dataStructures的更多相关文章

  1. 二维数组转稀疏数组、稀疏数组恢复二维数组(Java实现)

    public static void main(String[] args) { // 创建一个原始的二维数组 9*9 int chessArr1[][] = new int[9][9]; // 0表 ...

  2. java基础——多维数组和稀疏数组

    多维数组 多维数组可以堪称数组的数组,比如二维数组就是一个特殊的一维数组,其中每一个元素都是一个以为数组 而且数组 int a[][]= new int[2][3]; public class Arr ...

  3. 洛谷 P1972 [SDOI2009]HH的项链-二维偏序+树状数组+读入挂(离线处理,思维,直接1~n一边插入一边查询),hahahahahahaha~

    P1972 [SDOI2009]HH的项链 题目背景 无 题目描述 HH 有一串由各种漂亮的贝壳组成的项链.HH 相信不同的贝壳会带来好运,所以每次散步完后,他都会随意取出一段贝壳,思考它们所表达的含 ...

  4. poj3067 二维偏序树状数组

    题解是直接对一维升序排列,然后计算有树状数组中比二维小的点即可 但是对二维降序排列为什么不信呢?? /* */ #include<iostream> #include<cstring ...

  5. hdu1081 DP类最大子段和(二维压缩+前缀和数组/树状数组计数)

    题意:给出一个 n * n 的数字矩阵,问最大子矩阵和是多少. 由于和最长子段和问题类似,一开始想到的就是 DP ,一开始我准备用两个循环进行 DP ,对于每一个 (i,j) ,考察(i - 1,j) ...

  6. 二维偏序+树状数组【P3431】[POI2005]AUT-The Bus

    Description Byte City 的街道形成了一个标准的棋盘网络 – 他们要么是北南走向要么就是西东走向. 北南走向的路口从 1 到 n编号, 西东走向的路从1 到 m编号. 每个路口用两个 ...

  7. $[SHOI2007]$ 园丁的烦恼 二维数点/树状数组

    \(Sol\) 设一个矩阵的左上角为\((x_1,y_1)\),右下角为\((x_2,y_2)\),\(s_{x,y}\)是到\((1,1)\)二维前缀和,那么这个矩阵的答案显然是\(s_{x_2,y ...

  8. 生成二维码 加密解密类 TABLE转换成实体、TABLE转换成实体集合(可转换成对象和值类型) COOKIE帮助类 数据类型转换 截取字符串 根据IP获取地点 生成随机字符 UNIX时间转换为DATETIME\DATETIME转换为UNIXTIME 是否包含中文 生成秘钥方式之一 计算某一年 某一周 的起始时间和结束时间

    生成二维码 /// <summary>/// 生成二维码/// </summary>public static class QRcodeUtils{private static ...

  9. 【视频开发】OpenCV中Mat,图像二维指针和CxImage类的转换

    在做图像处理中,常用的函数接口有OpenCV中的Mat图像类,有时候需要直接用二维指针开辟内存直接存储图像数据,有时候需要用到CxImage类存储图像.本文主要是总结下这三类存储方式之间的图像数据的转 ...

随机推荐

  1. 解放双手,自动生成“x.set(y.get)”,搞定vo2dto转换

    作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言 给你机会,你也不中用啊 这些年从事编程开发以来,我好像发现了大部分研发那些不愿意干的 ...

  2. Dom 解析XML

    xml文件 <?xml version="1.0" encoding="UTF-8"?><data>    <book id=&q ...

  3. bootstrap.css 进度条没有动画效果

    操作系统设置会影响浏览器的行为 Win+R 输入 sysdm.cpl ,3 打开 性能 的 设置 确保 窗口内动画控件和元素 被勾选

  4. JAVA接收postman的中raw的参数

    /** * java获取raw */ public static String readRaw(InputStream inputStream) { String result = "&qu ...

  5. springboot 配置devtools热部署(不用重启服务可以刷新页面)

    一.加入devtools依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifa ...

  6. 二叉搜索树判定方法(c++实现)

    !!版权声明:本文为博主原创文章,版权归原文作者和博客园共有,谢绝任何形式的 转载!! 作者:mohist --- 欢迎指正--- 自己想到的方法是:使用 中序遍历数组或者链表,然后比较数组或者链表中 ...

  7. 【LeetCode】950. Reveal Cards In Increasing Order 解题报告(Python)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 模拟 日期 题目地址:https://leetcod ...

  8. 【LeetCode】905. Sort Array By Parity 解题报告(Python)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述: 题目大意 解题方法 自定义sorted函数的cmp 日期 题目地址:h ...

  9. 1084 - Winter

    1084 - Winter   PDF (English) Statistics Forum Time Limit: 2 second(s) Memory Limit: 32 MB Winter is ...

  10. Problem 2233 ~APTX4869

    Problem 2233 ~APTX4869 Accept: 55    Submit: 176Time Limit: 1000 mSec    Memory Limit : 32768 KB Pro ...