数组
稀疏数组(sparsearray)
应用场景
先看一个实际的需求
- 编写的五子棋程序中,有存盘退出和续上盘的功能。
- 分析问题:
因为该二维数组的很多值是默认值0,因此记录了很多没有意义的数据 -> 稀疏数组。
基本介绍
当一个数组中大部分元素为0,或者为同一个值的数组时,可以使用稀疏数组来保存该数组。
稀疏数组的处理方法是:
1)记录数组一共有几行几列,有多少个不同的值
2)把具有不同值的元素的行列及值记录在一个小规模的数组中,从而缩小程序的规模
二维数组 转 稀疏数组的思路:
1.遍历 原始的二维数组,得到有效数据的个数 sum
2.根据sum 就可以创建 稀疏数组
sparseArr int[sum + 1] [3]
3.将二维数组的有效数据数据存入到 稀疏数组
稀疏数组转原始的二维数组的思路:
1.先读取稀疏数组的第一行,根据第一行的数据,创建原始的二维数组,
比如上面的
chessArr2 = int [11][11]
2.在读取稀疏数组后几行的数据,并赋给 原始的二维数组 即可
应用实例
1)使用稀疏数组,来保留类似前面的二维数组(棋盘、地图等等)
2)把稀疏数组存盘,并且可以从新恢复原来的二维数组数
代码实现
package sparsearray; /** * 稀疏数组 * <p> * 思想: * 由二维数组转换为稀疏数组: * 1、记录二维数组整体结构(row,col),及数组中不同元素的个数 * 2、记录每行元素位置及存储的值 * <p> * 由稀疏数组转换为二位数组: * 1、根据稀疏数组记录的二位数组的结构恢复原数据结构(row,col) * 2、根据每行记录的位置及保存的值,恢复原元素位置和值 * * @author leizi * @create 2022-05-29 12:06 */ public class SparseArray { public static void main(String[] args) { int[][] arr = new int[6][7]; arr[0][3] = 22; arr[0][6] = 15; arr[1][1] = 11; arr[1][5] = 17; arr[2][3] = -6; arr[3][6] = 39; arr[4][0] = 91; arr[5][2] = 28; int[][] sparseArr = twoDimensionalArrayToSparsArray(arr); for (int i = 0; i < sparseArr.length; i++) { System.out.print("[" + i + "] "); for (int j = 0; j < sparseArr[0].length; j++) { System.out.print(sparseArr[i][j] + "|"); } System.out.println(); } } /** * 二维数组转稀疏数组 * * @param arr 二维数组 */ public static int[][] twoDimensionalArrayToSparsArray(int[][] arr) { // 查看二维数组结构和不同元素个数 int count = 0; for (int i = 0; i < arr.length; i++) { for (int j = 0; j < arr[i].length; j++) { if (0 != arr[i][j]) { ++count; } } } // 定义稀疏数组3列保存row|col|value int[][] sparsArr = new int[count + 1][3]; // 稀疏数组元素0记录二维数组结构 sparsArr[0] = new int[]{arr.length, arr[0].length, count}; int num = 1; for (int i = 0; i < arr.length; i++) { for (int j = 0; j < arr[i].length; j++) { if (0 != arr[i][j] && num <= count) { sparsArr[num] = new int[]{i, j, arr[i][j]}; num++; } } } return sparsArr; } }
本文来自博客园,作者:Lz_蚂蚱,转载请注明原文链接:https://www.cnblogs.com/leizia/p/16633715.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步