写点什么

java 数据结构与算法之稀疏矩阵算法,BTAJ 面试有关散列(哈希)表的面试题详解

用户头像
Java高工P7
关注
发布于: 1 小时前

11 11 2 1 2 1 2 3 2


解读抽取后的稀疏数组:


  • [0][0] 位置为二维数组行

  • [0][1] 位置为二维数组列

  • [0][2] 位置为二维数组有效点数(1 和 2 )总数

  • [1][0] 为 第一颗棋子行坐标

  • [1][1] 为 第一颗棋子列坐标

  • [1][2] 为 第一颗


《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》
浏览器打开:qq.cn.hn/FTe 免费领取
复制代码


棋子的值(1 表示黑子)


依次类推,记录棋盘所有棋子的坐标以及值


辅助图:



总结: 稀疏算法也是一个二维数组,最终行的个数为 总数+1,列为 3


//countTemp + 1 为行 (countTemp 为当前棋盘中有效数(!=0 的数))//3 为列 int sparseArray[][] = new int[countTemp + 1][3];


辅助图:


创建二维数组

这里以 11 * 11 的二维数组为例


//行 public static int mRow = 11;//列 public static int mColumn = 11;


//TODO 创建原始二维数组 数据 int chessArr1[][] = new int[mRow][mColumn];


//给黑子 白子赋值 chessArr1[1][2] = 1;//1 为黑子 chessArr1[2][3] = 2;//2 为白子// chessArr1[5][2] = 1;


System.out.println("原始的二维数组为:");for (int i = 0; i < chessArr1.length; i++) {for (int j = 0; j < chessArr1[i].length; j++) {System.out.printf("%d\t", chessArr1[i][j]);}System.out.println();}


运行结果为:


原始的二维数组为:0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

二维数组转稀疏数组

先记录棋盘中的所有棋子(!=0 的数)


//先得到棋盘中的所有棋子 !=0 的数


int countTemp = 0;//遍历行 for (int i = 0; i < mRow; i++) {//遍历列 for (int j = 0; j < mColumn; j++) {if (chessArr1[i][j] != 0) {countTemp++;}}}System.out.println("非 0 个数有 " + countTemp + "个");

创建稀疏数组:

给第一行赋值:


int sparseArray[][] = new int[countTemp + 1][3];


//TODO 给稀疏数组第一行赋值//行 sparseArray[0][0] = mRow;//列 sparseArray[0][1] = mColumn;//总数 sparseArray[0][2] = countTemp;


循环二维数组,将!=0 的值赋值给稀疏数组并打印:


//用来记录是第几个非 0 数据 int countTemp2 = 0;//遍历二维数组,将非 0 的数据放到 sparseArray[][]中 for (int i = 0; i < mRow; i++) {//遍历列 for (int j = 0; j < mColumn; j++) {if (chessArr1[i][j] != 0) {countTemp2++;sparseArray[countTemp2][0] = i;//i = 行 sparseArray[countTemp2][1] = j;//j = 列 sparseArray[countTemp2][2] = chessArr1[i][j];//chessArr1[i][j] = 具体的值}}}


//TODO 输出稀疏数组 System.out.println("稀疏数据为:");//遍历行 for (int i = 0; i < sparseArray.length; i++) {//遍历列 for (int j = 0; j < sparseArray[i].length; j++) {System.out.printf("%d\t", sparseArray[i][j]);}System.out.println();}


稀疏数组运行结果为:


稀疏数据为:11 11 2 1 2 1 2 3 2

稀疏数组转二维数组

创建二维数组

  • 行为稀疏数组 [0][0] 位置

  • 列为稀疏数组 [0][1] 位置

  • 循环次数为二维数组长度

用户头像

Java高工P7

关注

还未添加个人签名 2021.11.08 加入

还未添加个人简介

评论

发布
暂无评论
java 数据结构与算法之稀疏矩阵算法,BTAJ面试有关散列(哈希)表的面试题详解