稀疏数组的实现过程

稀疏数组竟如此简单 从一个场景来分析,为什么需要稀疏数组! 二维数组 我们以一个二维数组模拟五子棋为例,用二维数组模拟创建一个棋盘,数字1代表黑子,二代表白子。在某些场景下,我们需要保存游戏的进度,如果采用原始的二维数组的方式进行保存的话,我们可以看见存储量是非常大的。 所以,当我们采用稀疏数组进行存储后是这个样子的: 我们可以看出稀疏数组给我们节约了相当一部分的空间。 定义 稀疏数组也是一个数组,可以把它看成是一个普通数组的压缩。(一般情况下我们认为如果一个数组的无效数据量远大于有效数据的情况下,对数组进行压缩) 稀疏数 阅读详情

首先把一个大数组内容遍历然后提取行和列以及数据创建新的数组三行n+1列n是数据将数据存入就是存取 

package com.sparseArray;

public class SparseArray {
    public static void main (String[] args) {

        //创建一个原始二维数组
        //0表示没有棋子,1表示黑子2表示蓝
        int chessArr1[][] = new int[11][11];
        chessArr1[1][2] = 1;
        chessArr1[2][3] = 2;
        for (int[] row :chessArr1
             ) {
            for (int data:row
                 ) {
                System.out.printf("%d\t",data);
            }
            System.out.println();
        }

        //将二维数组转化稀疏数组
        //1.先遍历二维数组 得到非零的个数
        int sum = 0;
        for (int i=0;i<11;i++){
            for (int j=0;j<11;j++){
                if(chessArr1[i][j]!=0)
                    sum++;
            }
        }
        //创建对应的稀疏数组
    int sparseArr[][] = new int[sum+1][3];
        //给稀疏数组赋值
        sparseArr[0][0]=11;
        sparseArr[0][1]=11;
        sparseArr[0][2]=sum;
    //将数据导入
        //遍历数组将非零数据导入
        int 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();
       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]);
       }


    //1先读取第一行数据的行列创建恢复原始数组
    int chessArr2[][] = new int[sparseArr[0][0]][sparseArr[0][1]];

       //再将数组内容导入
        for (int i=1;i<sparseArr.length;i++){
            chessArr2[sparseArr[i][0]][sparseArr[i][1]] = sparseArr[i][2];
        }

        System.out.println();
        for (int[] row :chessArr2
        ) {
            for (int data:row
            ) {
                System.out.printf("%d\t",data);
            }
            System.out.println();
        }

    }
}

文件写入写出

 //文件写入
        try {
          FileWriter  s = new FileWriter("map.txt");
        for (int i = 0; i <sparseArr.length; i++) {
            for (int j = 0; j <3 ; j++) {
                    s.write(sparseArr[i][j]);
            }}
            s.flush();
            s.close();
            }catch (IOException e) {
            e.printStackTrace();
        }


        int[][] sparseArr2 = new int[sum+1][3];
        int getNum = 0;
        try {
            FileReader  reader = new FileReader("map.txt");

            for(int i =0; i < sparseArr2.length; i++) {
                for(int j =0; j < 3; j++) {
                    getNum = reader.read();
                    sparseArr2[i][j] = getNum;
                }
            } reader.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
                System.out.println();
        System.out.println("读取后稀疏数组为");
        for(int i =0; i < sparseArr2.length; i++) {
            System.out.printf("%d\t%d\t%d\n", sparseArr2[i][0],sparseArr2[i][1],sparseArr2[i][2]);
            //格式化输出
        }
        System.out.println();
        //输出一下的稀疏数组

 

【全网最新OD题库】2026华为 OD 机试C卷 机考真题库清单(全真题库)含考点说明(华为OD+2025年C卷+2025年B卷+2025年A卷+E卷+D卷+C卷) 华为od机试,华为od机试真题,华为od机试E卷,华为odE卷,华为od机试真题E卷,华为OD,华为OD机试,华为OD机试真题,华为od机考,华为od机试D卷,华为od机试真题D卷,华为od手撕代码,华为od,华为od机试C卷,华为od e卷,华为2024e卷,od机试,2024E卷,华为OD机试E卷,什么是华为od,华为od介绍,全面了解华为od,2024华为od,如何备战华为od,华为od算法,华为od手撕代码,华为OD机试2024年最新题库,一文带你读懂华为OD,华为机试e卷,华为OD2025B卷、华 阅读详情

相关推荐

MATLAB实战:手把手教你实现Gardner环路位同步(附完整代码)

本文通过MATLAB实战,详细讲解了Gardner环路位同步算法的原理与实现。内容涵盖插值滤波器、定时误差检测、环路滤波器与数控振荡器等核心模块,并提供完整代码和调试技巧,帮助读者掌握数字通信中关键的符号定时同步技术。

weixin_29048775的博客 175

为Array实现一个Reader,通过接口getReader获取,Reader 有一个接口 read(n)

为Array实现一个Reader,通过接口getReader获取,Reader 有一个接口 read(n) 每次调用会按顺序读区数组的n(默认为1)个元素,调用不会改变数组本身的值,若数组已全部读取完则返回空数组,若传入的参数不为正整数则抛出异常 例: const arr = [1, 2, 3, 4, 5, 6] const reader = arr.getReader() console.log(reader.read(‘1’)) // Error console.log(reader.read(-1).

weixin_45740510的博客 586

告别反复刷写:用英飞凌XCP Overlay功能实现ECU标定与诊断的‘热更新’

本文详细介绍了英飞凌XCP Overlay功能在ECU标定与诊断中的应用,实现参数的'热更新',避免反复刷写Flash。通过地址重映射技术,将标定变量从Flash重定向到RAM,显著提升工作效率并保护Flash寿命。文章涵盖技术原理、工程实践、功能安全考量及高级应用场景,为汽车电子工程师提供完整解决方案。

weixin_30689307的博客 530

Java 大文本多线程高效读取

本文介绍 Java多线程读取大文件性能提升的高效方案。 前沿 我们在读取一个正常文件的时候,将使用,BufferedReader.read() 的三种方法: BufferedReader.read()  单字节,这个效率最低,基本不考了 BufferedReader.read(char[] cbuf)   根据传入 cbuf 的长度,顺序读取。此方法如果单线程的时候,可以考虑,显然

lianghuaxm的专栏 3206

极空间NAS零基础部署Wiki.js:Docker+PostgreSQL全流程避坑指南

本文提供了一份在极空间NAS上从零部署Wiki.js私有知识库的详细指南。通过Docker容器化技术,结合PostgreSQL数据库,手把手讲解环境准备、核心组件配置、性能优化及安全加固等全流程,并特别针对极空间平台特性提供了避坑要点,帮助用户打造安全、高效、自主可控的知识管理系统。

3a9bq4r8t2y的博客 487

电机传动机构的转矩与惯量折算

参考《工业运动控制》

庐州牧 1万+

什么是稀疏数组?稀疏数组详解

【1】背景 如下图所示,这里有一个 15 ×15 的棋盘,如果现在要让你通过编码的方式,让你将这盘棋局保存起来,你会怎么做呢? 面对行列数据的保存,我相信大多人第一时间都会想到用二维数组进行保存。 【2】普通数组保存棋盘数据 比如,我们可以将棋盘进行抽象化,用一个 15 × 15 的二维数组来表示,然后用 0 表示空点,用 1 表示白子,用 2 表示黑子,于是就可以抽象为如下模样。 于是,我们可以通过如下代码,将数据保存到二维数组中。 /** * 将棋盘数据保存为二维数组 */ .

小白一个 9482

Go-zero微服务实战:从零搭建电商用户系统(含完整代码示例)

本文详细介绍了如何使用go-zero框架从零搭建电商用户系统,包含完整的微服务架构设计、核心功能实现代码示例以及性能优化策略。通过分层架构设计、JWT认证、分布式锁等关键技术,实现高并发、高可用的用户系统,适用于电商平台开发。

weixin_29275257的博客 257

稀疏数组详解

稀疏数组 一、什么是稀疏数组? 1、系数矩阵的官方定义 在矩阵中,若数值为0的元素数目远远多于非0元素的数目,并且非0元素分布没有规律时,则称该矩阵为稀疏矩阵;与之相反,若非0元素数目占大多数时,则称该矩阵为稠密矩阵。定义非零元素的总数比上矩阵所有元素的总数为矩阵的稠密度。 2、稀疏数组 当一个数组中大部分元素为0,或者为同一值(也就是说可以不是0)的数组时,可以使用系数数组来保存该数组。 2.1、大部分怎么去理解 通常认为矩阵中非零元素的总数比上矩阵所有元素总数的值小于等于0.05时,则称该矩阵为稀疏矩阵

m0_52209438的博客 1724

【AAOS】【源码分析】用户管理(五)-- MUMD介绍

MUMD(多用户多屏显示)是Android Automotive OS为车载多乘员场景设计的功能,支持不同座位用户独立操作各自屏幕。

码农的历程 1512

项目介绍 MATLAB实现基于LSTM-XGBoost长短期记忆网络(LSTM)结合极端梯度提升(XGBoost)进行多变量时序预测的详细项目实例(含模型描述及部分示例代码)

本项目基于MATLAB平台,实现LSTM-XGBoost混合模型进行多变量时序预测。通过LSTM网络自动提取时序特征,结合XGBoost强大的回归能力,有效解决多变量时序数据的高维复杂性、长短期依赖捕捉等难题。项目包含完整的数据预处理流程、模型构建与训练方法,以及性能评估指标。提供的GUI界面支持参数调整、训练监控和结果可视化,适用于能源、金融、气象等多领域预测任务。配套代码详细注释,便于理解模型实现细节,为时序预测研究提供实用参考框架。

优质创作者: 人工智能技术领域 对于有一定基础的 MATLAB和Python带具体需求都可以详谈 MATLAB和Python可以提供代码调试服务加油 谢谢 你的鼓励是我前行的动力 谢谢支持 加油 谢谢 102

稀疏数组 - SparseArray

一、稀疏数组的概念 当一个数组中大部分元素是0,或为同一个值的时候,可以使用稀疏数组来保存数组。 它是一个十分有效的存储结构,便于节省存储空间。 它的处理方式是: 1、记录数组一共有几行几列,有多少不同的值; 2、把具有不同值的元素的行、列及值记录在一个小规模二维数组中(稀疏数组),从而缩存储数据的规模。 ...

kayyoo的博客 1441

爬取Unsplash高清壁纸:Python爬虫实战教程(最新技术)

在当今数字化时代,高清壁纸已经成为人们个性化设备的重要元素。Unsplash作为全球最知名的免费高质量图片网站,汇集了数百万张由全球摄影师贡献的高清图片。然而,Unsplash官网的下载方式需要手动操作,对于需要批量下载壁纸的用户来说效率较低。本文将带你深入探索如何使用Python爬虫技术高效爬取Unsplash高清壁纸,从基础到进阶,全面掌握图片爬取的核心技术。Unsplash成立于2013年,是一个完全免费的图片分享平台。高质量内容:所有图片均由专业摄影师上传,分辨率普遍达到4K以上免费商用。

2201_76125261的博客 936

稀疏数组实现过程及原理

当我们想要存储一个多维数组,且这个多为数组一样的元素很多(超过90%)我们就可以采用稀疏数组对其进行存储; 实现过程:首先我们自己构建一个二位数组,然后们把二维数组转为稀疏数组,再把稀疏数组进行还原操作; 在我们的代码中我们有一个将稀疏数组储存到文件中的一个过程; import java.io.*; /** * @author: zfq * @date: 2021/8/4 15:34 * @description: */ public class SparesArray { pub

csdn学子 275

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

稀疏数组的定义作用和Java代码实现过程及结果

一、什么是稀疏数组 稀疏数组,是一种特殊的二维数组,对二维数组中无意义的数据进行压缩,达到节省空间的目的 二、实现稀疏数组 1、创建一个二维数组并打印出来 打印出以下结果 可以看出,对于二维数组中的0同样占据空间,因此可以通过将二维数组转换为稀疏数组保留有效数据节省空间。 2、利用for循环将上面二维数组中的有效数字的个数提取出来 3、开始创建一个稀疏数组 array01[0][0]对应着二维数组行的个数=11 array01[0][1]对应着二维数组列的个数...

weixin_46478061的博客 313

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

jsonarray转string数组_一次稀疏数组的实现过程(附解答思路)

絮叨很简单的一个题哦,就是类似于压缩,解压想办法节省空间题目如图一个棋盘,那我们应该怎么保存这个下棋的记录呢?其实我们可以把它变成一个数组来表示,如下图所示。我们可以看到原始数组中,有很多0的元素,占用了很多的空间,那么我们的目的就是把这些0的元素去掉,然后压缩一下这个二维数组,把它变成一个稀疏数组。如下所示本来占用的空间是11x11 现在是3x3是不是减少了很多的存储。那么我们在代码中是如何去实...

weixin_39980234的博客 226

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

遍历二维数组_一次稀疏数组的实现过程(附解答思路)

絮叨很简单的一个题哦,就是类似于压缩,解压想办法节省空间题目如图一个棋盘,那我们应该怎么保存这个下棋的记录呢?其实我们可以把它变成一个数组来表示,如下图所示。我们可以看到原始数组中,有很多0的元素,占用了很多的空间,那么我们的目的就是把这些0的元素去掉,然后压缩一下这个二维数组,把它变成一个稀疏数组。如下所示本来占用的空间是11x11 现在是3x3是不是减少了很多的存储。那么我们在代码中是如何去实...

weixin_31904867的博客 139

vb datatable转二维数组_一次稀疏数组的实现过程(附解答思路)

絮叨很简单的一个题哦,就是类似于压缩,解压想办法节省空间题目如图一个棋盘,那我们应该怎么保存这个下棋的记录呢?其实我们可以把它变成一个数组来表示,如下图所示。我们可以看到原始数组中,有很多0的元素,占用了很多的空间,那么我们的目的就是把这些0的元素去掉,然后压缩一下这个二维数组,把它变成一个稀疏数组。如下所示本来占用的空间是11x11 现在是3x3是不是减少了很多的存储。那么我们在代码中是如何去实...

weixin_39569747的博客 185

数据结构(Java)--稀疏数组(实现过程):

稀疏数组: 当一个数组的大部分元素为0,或者为同一个值的数组时,可以使用稀疏数组来保存该数组; 稀疏数组的处理方法: 记录数组有几行几列,有多少个不同的值; 把具有不同值的元素的行列及值记录在一个小规模的数组中,从而缩小存储的空间; 应用实例: 使用稀疏数组保留像棋盘地图等的二维的数据; 二维数组转稀疏数组的思路: 遍历原始的二维数组,得到有效数据的个数; 根据sum创建稀疏数组,sparseArr int[sum+1][3] 将二维数组的有效数据存入到稀疏数组; 稀疏数组转原始的二维数组的

WangCode 184

Java实现稀疏数组

一、线性结构 线性结构是最常用的数据结构,其特点是数据元素之间存在一对一的线性关系 线性结构有两种不同存储结构,即顺序存储结构和链式存储结构 顺序存储的线性表称为顺序表,顺序表中的存储元素是连续的,即在内存中是连续的,例如数组 链式存储的线性表称为链表,链表中的存储元素不一定是连续的,元素节点中存放数据元素以及相邻元素的地址信息,但好处是可以充分利用碎片地址 线性结构常见的有:数组、队列、链表和...

baolingye的博客 5683

稀疏数组(最详解)

概念 当一个数组中大部分元素为0,或者为同一值的数组时,可以使用稀疏数组来保存该数组。 稀疏数组的处理方式是:记录数组一共有几行几列,有多少个不同值;把具有不同值的元素和行列及值记录在一个小规模的数组中,从而缩小程序的规模 如下图:左边是原始数组,右边是稀疏数组 代码实现 public class SparseArray { public static void main(String[] args) { //创建一个二维数组 11*11 0:没有棋子, 1:黑..

白夜行 9063

数据结构(Java实现)- 稀疏sparsearray数组

1、先看一个实际的需求 2、基本介绍 3、实现 3.1二维数组转稀疏数组 3.2稀疏数组转二维数组 4、代码实现: 1、先看一个实际的需求 在编写的五子棋程序中,有存盘退出和续上盘的功能。 这时候就要求我们要使用二维数组来记录棋盘,如下图所示: 在上图的二维数组中用1表示黑棋,用2表示蓝棋 分析问题:我们可以发现该二维数组的很多值是默认值0,因此记录了很多没有意义的数据。这时候就需要用稀疏数组对这个二维数组进行压缩。 2、基本介绍 当一个数组中大部分元素为0,或者为同一...

jQueryZK的博客 9540

Java实现稀疏数组以及将稀疏数组存储到硬盘和从硬盘种读取操作

Java实现稀疏数组 原二维数组—>稀疏数组 稀疏数组—>原二维数组 将稀疏数组保存到硬盘中 将稀疏数组读入内存 为了扩展思维,练习编程,所以写法不一 从上到下看就好,没有对函数进行封装 package zc; /** * Java实现稀疏数组 * 原二维数组--->稀疏数组 * 稀疏数组--->原二维数组 * 将稀疏数组保存到硬盘中 * 将稀疏数组读入内存 ...

yuchen_lucky的博客 1574

java实现稀疏数组

java实现稀疏数组 稀疏数组用于减少对存储资源的占用,只适用于数据稀疏的情况,当数组中存储的的数据过多的时候,存储在稀疏数组中的数据量,可能比原数组的中数据量还大,就不适用了。 注:来还债了,初学数据结构。 二维数组转稀疏数组的思路: 1.遍历原始的二维数组,得到有效数据的个数sum 2.根据sum就可以创建稀疏数组sparseArr int[sum + 1][3] 3.将数组的有效数据存入到稀疏数组 稀疏数组转原始数组的思路: 1.先读取稀疏数组的第一行,根据第一行的数据, 创建原始的二维数组,比如上

qq_41006650的博客 300

Java代码详细实现稀疏数组的转换,稀疏数组与二维数组的互相转换,二维数组转稀疏数组存文件,再读取文件将稀疏数组恢复成二维数组

稀疏数组与二维数组的互相转换,二维数组转稀疏数组存文件,再读取文件将稀疏数组恢复成二维数组 package com.ja.sparseArray; import java.io.*; /** * 稀疏数组练习 * 创建二维数组 --》 转换稀疏数组 --》 存文件 --》 读取--》 还原二维数组 */ public class SparseArray { public stat...

weixin_45481772的博客 496

稀疏数组原理及代码实现

1.什么是稀疏数组 想象有一个11x11的二维数组,其中只有几个地方有值,其余的地方都是0或者别的同一个值。为了减少空间的占用,我们可以使用稀疏数组来对数据存储。如下图: --->>> 可以看到,在稀疏数组中,第一行存储了原始数组的大小以及非零的值的数量。从第二行开始,存储每一个非零数值的位置信息和具体...

256
上一篇: 祭奠自己逝去的三年时光
下一篇: 用数组实现队列
大哥的叔
博客等级 码龄8年 72粉丝 295原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值