门户网站开发费需入无形资产,线上小程序制作,常用个人网站,网站首页轮播图怎么换1. 五子棋游戏#xff0c;玩家对战一半停战休息#xff0c;此时需要存储当前对战双方棋子信息 a. 采用二维数组存储#xff1a; 0为空#xff0c; 1代表黑棋 2代表蓝色棋子 b. 棋盘为11行#xff0c;11列 int [][] chessArray new int [11][11]; c. 出现的问题玩家对战一半停战休息此时需要存储当前对战双方棋子信息 a. 采用二维数组存储 0为空 1代表黑棋 2代表蓝色棋子 b. 棋盘为11行11列 int [][] chessArray new int [11][11]; c. 出现的问题整个数组只存储了两个值。有点浪费内存空间延伸出将0或其他相同数值抽出来组成一个新的数组。与代码中抽出公共方法有异曲同工之妙~ 2. 稀疏数组sparse array) 当一个数组中大部分元素为或者为同一个值的数组时可以使用稀疏数组来保存该数组。例如保存棋盘数据地图信息等 3. 稀疏数组的处理方法是: 1) 记录数组一共有几行几列有多少个不同的值 2) 把具有不同值的元素的行列及值记录在一个小规模的数组中从而缩小程序的规模 4. 思路分析 a. 遍历原始二维数组获取有效的数据个数(非0值个数sum); b. 创建稀疏数组 int [][] new sparseArr new [sum 1][3]; c. 稀疏数组第一行存储原始数组信息总共11行11列有2条有效数据存入稀疏数组。所以稀疏数组需要sum1行。 c. 循环原始数组将黑棋蓝棋目前的位置信息存入稀疏数组 d. 打印下稀疏数组 e. 稀疏数组转换为原始数组原以为直接两层循环再判断稀疏数组值是否在此循环内进行使用需要多层循环思路不对。是稀疏数组向原始数组转换解压缩用非稀疏数组展示保存的棋盘数据
package com.nami.algorithm.study.day01;/*** beyond u self and trust u self.** Author: lbc* Date: 2023-08-28 17:23* email: 594599620qq.com* Description: keep coding*/
public class SparseArray {public static void main(String[] args) {// 创建一个原始的二维数组 11 * 11// 0: 表示没有棋子 1 表示 黑子 2 表蓝子int chessArr1[][] new int[11][11];chessArr1[1][2] 1;chessArr1[2][3] 2;chessArr1[4][5] 2;// 输出原始的二维数组System.out.println(原始的二维数组~~);for (int[] row : chessArr1) {for (int data : row) {System.out.printf(%d\t, data);}System.out.println();}int sum 0;for (int[] row : chessArr1) {for (int data : row) {if (data 0) sum;}}int sparseArr[][] new int[sum 1][3];// 给稀疏数组赋值sparseArr[0][0] 11;sparseArr[0][1] 11;sparseArr[0][2] sum;// 遍历二维数组将非 0 的值存放到 sparseArr 中int count 0; //count 用于记录是第几个非 0 数据for (int i 0; i 11; i) {for (int j 0; j 11; j) {if (chessArr1[i][j] ! 0) {count;sparseArr[count][0] i;sparseArr[count][1] j;sparseArr[count][2] chessArr1[i][j];}}}// 输出稀疏数组的形式System.out.println();System.out.println(得到稀疏数组为~~~~);for (int i 0; i sparseArr.length; i) {System.out.printf(%d\t%d\t%d\t\n, sparseArr[i][0], sparseArr[i][1], sparseArr[i][2]);}System.out.println();//将稀疏数组 --》 恢复成 原始的二维数组//1. 先读取稀疏数组的第一行根据第一行的数据创建原始的二维数组int chessArr2[][] new int[sparseArr[0][0]][sparseArr[0][1]];//2. 在读取稀疏数组后几行的数据(从第二行开始)并赋给 原始的二维数组 即可for (int i 1; i sparseArr.length; i) {chessArr2[sparseArr[i][0]][sparseArr[i][1]] sparseArr[i][2];}// 输出恢复后的二维数组System.out.println();System.out.println(恢复后的二维数组);for (int[] row : chessArr2) {for (int data : row) {System.out.printf(%d\t, data);}System.out.println();}}}推荐尚硅谷算法视频
总结 稀疏数组是对于原始数组的抽象提取不同值进行存储。 稀疏数组第一行存储原始数组的行信息列信息非0值或不同值得个数进行保存。使用时是稀疏数组向原始数组进行转换使用。它的作用相当于对数组进行压缩。解压缩同压缩文件流程差不多意思