稀疏数组练习demo 数据结构和算法
稀疏数组课后练习demo 数据结构和算法
实现了二维数组转稀疏数组保存到文件,读文件再转为二维数组
import java.io.*;
import java.util.Arrays;/*** https://www.bilibili.com/video/BV1E4411H73v?p=9* 稀疏数组课后练习* @author zhuangbinan 2021.12.14*/
public class SparseArrayTest {public static void main(String[] args) {//有一个棋盘 有11行11列 11*11 = 121int chessLength = 11;int chessHeight = 11;//用二维数组表示int [][] chessArr = new int [chessLength][chessHeight];//初始化的棋盘上0表示空着的,二维数组的默认值也是0//棋盘上有 黑子,蓝子, 1表示黑子, 2表示蓝子//在棋盘的第2行第3个放了一个黑子// 第3行第4个放了一个蓝子chessArr[1][2] = 1;chessArr[2][3] = 2;//输出棋盘 ,查看效果queryDoubleArray(chessArr);// 需求: 棋盘要有 存盘到文件,读取存盘复盘功能// 要做到存盘文件要尽可能少的占用磁盘空间// 可以用到稀疏数组// 稀疏数组: 是一个双列数组,第一行第一列存了原始棋盘有多少行,第二列存了有多少列,第三列存了原始棋盘有几个棋子;// 第二行 到 最后一行, 存的是 棋子的位置 和值,// 例如 :稀疏数组的第二行第一列是原始棋盘的第一个棋子的行数,// 第二行第二列是第一个棋子的列数,// 第二行第三列是第一个棋子的值//// 行(row) 列(col) 值(value)//原始棋盘转为稀疏数组//首先为了创建稀疏数组,要获取原始棋盘上棋子数量int count = 0;for (int[] row : chessArr) {for (int col : row) {if (col != 0) {count ++;}}}System.out.println("棋盘上棋子数量:"+count);//创建稀疏数组int[][] sparseArr = new int[count + 1][3];//System.out.println("查看初始化的稀疏数组");queryDoubleArray(sparseArr);//给稀疏数组填值//第一行sparseArr[0][0] = chessLength;sparseArr[0][1] = chessHeight;sparseArr[0][2] = count;//第二行 - 最后一行int num = 1;for (int row = 0; row < chessArr.length; row++) {for (int col = 0; col < chessArr.length; col++) {if (chessArr[row][col] != 0) {sparseArr[num][0] = row;sparseArr[num][1] = col;sparseArr[num][2] = chessArr[row][col];num ++;}}}System.out.println("查看有值后的稀疏数组");queryDoubleArray(sparseArr);//稀疏数组有值后,要进行存盘;//将数组转为字符格式File file = new File("chessSrc.txt");try {FileOutputStream outputStream = new FileOutputStream(file);for (int[] row : sparseArr) {for (int col : row) {String s = col + ",";outputStream.write(s.getBytes());}outputStream.write("\n".getBytes());}outputStream.close();}catch (Exception e){e.printStackTrace();}//存到chessSrc.txt文件里了//现在要读出来,转为棋盘try {FileReader fr2 = new FileReader(file);BufferedReader bufferedReader2 = new BufferedReader(fr2);int readRows = 0;while (true) {String line = bufferedReader2.readLine();if (line != null) {readRows ++;}else {break;}}bufferedReader2.close();fr2.close();//首先要根据读到的文件判断有几行,好创建稀疏数组System.out.println("有几行:"+readRows);//稀疏数组总是3列,创建复原的稀疏数组int [][] recoverySparseArr = new int[readRows][3];//再读一次文件,给稀疏数组填充值FileReader fr = new FileReader(file);BufferedReader bufferedReader = new BufferedReader(fr);int row = 0;while (true) {String line = bufferedReader.readLine();if (line != null) {String[] lineArr = line.split(",");System.out.println(Arrays.toString(lineArr));recoverySparseArr[row][0] = Integer.valueOf(lineArr[0]);recoverySparseArr[row][1] = Integer.valueOf(lineArr[1]);recoverySparseArr[row][2] = Integer.valueOf(lineArr[2]);row ++;} else {break;}}bufferedReader.close();fr.close();System.out.println("查看复原后的稀疏数组:");queryDoubleArray(recoverySparseArr);//再把稀疏数组还原成二维棋盘//首先读取第一行,创建二维数组int [][] recoveryChessArr =new int[recoverySparseArr[0][0]][recoverySparseArr[0][1]];//给里面填充值for (int i = 1; i < recoverySparseArr.length; i++) {recoveryChessArr[recoverySparseArr[i][0]][recoverySparseArr[i][1]]= recoverySparseArr[i][2];}System.out.println("查看复原后的棋盘");queryDoubleArray(recoveryChessArr);} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}public static void queryDoubleArray(int [][] doubleArr){System.out.println();for (int[] row : doubleArr) {for (int col : row) {System.out.print(col + " ");}System.out.println();}}}
稀疏数组练习demo 数据结构和算法相关推荐
- 怎样将树的中序遍历的数输入到一个数组中_数据结构与算法-二叉查找树平衡(DSW)...
上一节探讨了二叉查找树的基本操作,二叉查找树的查找效率在理想状态下是O(lgn),使用该树进行查找总是比链表快得多.但是,该论点并不总是正确,因为查找效率和二叉树的形状息息相关.就像这样: 图1-1给 ...
- 减小程序规模!稀疏数组Sparsearray,数据结构二维数组与稀疏数组转换,Java实现
文章目录 基本介绍 应用实例 基本介绍 当一个数组中大部分元素为0,或者为同一个值的数组时,可以使用稀疏数组来保存该数组. 稀疏数组的处理方法是: ①记录数组一共有几行几列,有多少个不同的值(0除外) ...
- 求最大子数组和(数据结构和算法C++)
求最大子数组和 题目 纠错1: 修改1: 动态规划1: 动态规划的进一步优化: 贪心法1: 题目 给你一个整数数组 nums ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大 ...
- 数据结构与算法--再来聊聊数组
再来聊聊数组 这篇我们来总结一下数组相关的一些算法,数组的特点在于我们能通过下标得到对应数据,时间复杂度在O(1),之前有多篇文章有数组相关的体系,一下来一个归纳: 数据结构与算法–判断扑克牌是否顺子 ...
- 数据结构与算法---稀疏数组
数据结构与算法-稀疏数组 1.基本介绍: 当一个数组中大部分元素为0,或者为同一个值的数组时,可以使用稀疏数组来保存该数组. 2.稀疏数组的处理方法是: (1)记录数组一共有几行几列,有多少个 ...
- 数据结构与算法————稀疏数组
引言 数据压缩方面,我们往往可以通过稀疏数组来保存有效数据,节省存储空间. 一.稀疏数组的概念 当一个数组中大部分元素是0,或为同一个值的时候,可以使用稀疏数组来保存数组. 它是一个十分有效的存储结构 ...
- 尚硅谷01 数据结构与算法_数据结构与算法介绍+稀疏数组
数据结构与算法的关系 几个实际编程中遇到的问题 要想写出优秀的算法,首先应该能读懂别人写好的算法. 将生活中遇到的实际问题,使用程序来解决 线性结构和非线性结构 线性结构和非线性结构的关系: 数据结构 ...
- 菜鸟窝-数据结构与算法之稀疏数组
数据结构与算法 数据结构是组织(包括存储.处理等)数据的方式,是算法的基础 程序=数据结构+算法:数据结构分为线性和非线性 五子棋问题.约瑟夫问题等都离不开数据结构与算法 常用算法案例:修路问题.最短 ...
- 新星计划Day4【数据结构与算法】 稀疏数组与队列
新星计划Day4[数据结构与算法] 稀疏数组与队列
最新文章
- sqoop数据迁移的应用
- 如何强制“ git pull”覆盖本地文件?
- Linux的NTP配置总结(转)
- C#如何安全、高效地玩转任何种类的内存之Span的本质(一)。
- JAVA数据库连接池实现
- MailMail正式发布!注册码免费发放活动开启!(已结束~~不要再回复咧~)
- 自创解决键盘最后退出的问题
- 泛微云桥e-Bridge任意文件读取
- 思科模拟器配置默认路由(下一跳使用端口)
- 如何使移动设备字体大小自适应
- Allegro打散Group的两种方法操作指导
- Win系统如何修改远程桌面端口3389
- (优化解决)低时间解决偶位回文
- 一个90后对前辈们的“ 宣战”
- 获取当前时间年月周(按每月周一开始到周日算第一周)
- 前端实现lottie案例
- linux p2p download tools
- 算法的力量 ——李开复
- JpaRepository动态查询sql
- TypeError: Cannot create property ‘csrq‘ on string ‘‘“