数据结构-稀疏数组

文章目录

  • 1、什么是稀疏数组?
  • 2、稀疏数组的存储流程
  • 3、代码实现
  • 4、运行结果

1、什么是稀疏数组?

当一个数组中大部分元素为0,或者为同一个值的数组时,可以使用稀疏数组来保存该数组。

2、稀疏数组的存储流程

  1. 记录数组一共有几行几列,有多少个不同的值。
  2. 把具有不同值的元素的行列及值记录在一个小规模的数组中,从而缩小程序的规模。
    在这里插入图片描述

3、代码实现

以上面案例作为代码实现的基础:

 public static void main(String[] args) {/*稀疏数组的存储:1.定义原始数组2.统计原始数组行列3.创建稀疏数组4.遍历原始数组,将值存储到稀疏数组稀疏数组的还原:1.获取稀疏数组中原数组的行列2.创建原始数组3.遍历稀疏数组进行还原*/int[][] sourceArray = {{0,0,0,22,0,0,15},{0,11,0,0,0,17,0},{0,0,0,-6,0,0,0},{0,0,0,0,0,39,0},{91,0,0,0,0,0,0},{0,0,28,0,0,0,0}};// 稀疏数组的存储int[] colAndRow = getSourceArrayColAndRow(sourceArray);int[][] sparseArray = createArray(colAndRow[2]+1, 3);setSparseArray(colAndRow,sourceArray,sparseArray);printArray(sparseArray);// 系数数组的还原int[][] originalArray = createArray(sparseArray[0][0], sparseArray[0][1]);setSourceArray(sparseArray, originalArray);printArray(originalArray);}private static void setSourceArray(int[][] sparseArray, int[][] originalArray) {for (int i = 1; i < sparseArray.length; i++) {originalArray[sparseArray[i][0]][sparseArray[i][1]] = sparseArray[i][2];}}private static void printArray(int[][] sparseArray) {for(int i = 0; i < sparseArray.length; i++) {System.out.println(Arrays.toString(sparseArray[i]));}System.out.println("==================>");}private static void setSparseArray(int[] colAndRow, int[][] sourceArray, int[][] sparseArray) {sparseArray[0] = new int[]{colAndRow[0],colAndRow[1],colAndRow[2]};int index = 1;for(int i = 0; i < sourceArray.length; i++){for(int j = 0; j < sourceArray[0].length; j++){if(sourceArray[i][j] != 0){sparseArray[index++] = new int[]{i, j, sourceArray[i][j]};}}}}private static int[][] createArray(int col, int row) {return new int[col][row];}private static int[] getSourceArrayColAndRow(int[][] sourceArray) {int n = 0;for(int i = 0; i < sourceArray.length; i++){for(int j = 0; j < sourceArray[0].length; j++){if(sourceArray[i][j] != 0){n++;}}}return new int[]{sourceArray.length, sourceArray[0].length, n};}

4、运行结果

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/526580.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【红外与可见光融合:条件学习:实例归一化(IN)】

Infrared and visible image fusion based on a two-stage class conditioned auto-encoder network &#xff08;基于两级类条件自编码器网络的红外与可见光图像融合&#xff09; 现有的基于自动编码器的红外和可见光图像融合方法通常利用共享编码器从不同模态中提取特征&am…

【MATLAB】MATLAB学习笔记

MATLAB入门 基础操作变量命名数据类型逻辑和流程控制循环结构分支结构 绘图基本操作二维平面绘图绘图参数三位立体绘图图像窗口的分割 本文参考B站视频&#xff1a;BV13D4y1Q7RS 由于我对于C语言很熟悉&#xff0c;很多语法是会参考C来学 基础操作 清屏%% 清空环境变量及命令 …

xxl-job学习记录

1、应用场景 例&#xff1a; 某收银系统需要在每天凌晨统计前一天的财务分析、汇总 某银行系统需要在信用卡还款日前三天发短信提醒等 2、为什么需要使用任务调度 spring中提供了注解Scheduled的注解&#xff0c;这个注解也可以实现定时任务的执行 我们只需要在方法上使用这…

计算机组成原理实验报告1 | 实验1.1 运算器实验(键盘方式)

本文整理自博主大学本科《计算机组成原理》课程自己完成的实验报告。 —— *实验环境为学校机房实验箱。 目录 一、实验目的 二、实验内容 三、实验步骤及实验结果 Ⅰ、单片机键盘操作方式实验 1、实验连线&#xff08;键盘实验&#xff09; 2、实验过程 四、实验结果的…

rabbitmq 基本总结

rabbitmq 的基本概念 vhost、broker、producer、 consumer、 exchange、 queue、 routing key rabbitmq 常用的队列类型&#xff0c;工作队列&#xff08;简单队列&#xff09;,pub/sub, routing key&#xff0c; topic 模式 <dependency><groupId>com.rabbitmq&l…

【C语言】tcp_transmit_skb

一、__tcp_transmit_skb讲解 这个函数 __tcp_transmit_skb() 是 Linux 内核中 TCP/IP 协议栈的一部分&#xff0c;负责处理传输控制协议&#xff08;TCP&#xff09;数据包的发送。具体来说&#xff0c;这个函数将 TCP 头部添加到一个没有任何头部信息的 socket buffer (sk_bu…

maven中dependencyManagement

如果所在pom中dependency引入的依赖没有指定版本号&#xff0c;会以pom中dependencyManagement所制定的版本号为准吗 是的&#xff0c;如果在项目的 <dependency> 元素中没有指定版本号&#xff0c;而且该依赖在 <dependencyManagement> 中有指定版本号&#xff0…

springboot255基于spring boot的疫情信息管理系统

疫情信息管理系统的设计与实现 摘要 近年来&#xff0c;信息化管理行业的不断兴起&#xff0c;使得人们的日常生活越来越离不开计算机和互联网技术。首先&#xff0c;根据收集到的用户需求分析&#xff0c;对设计系统有一个初步的认识与了解&#xff0c;确定疫情信息管理系统…

童装WP模板

童装WP模板 https://www.wpniu.com/moban/6359.html

【io.net空投】交互攻略

一、io.net是什么 Io.net 是一个基于 Solana 的DePIN项目&#xff0c;为人工智能 (AI) 和机器学习 (ML) 公司聚合 GPU 资源。 Io.net 的例子&#xff0c;就是鼓励大家出借 GPU 算力&#xff0c;为 AI 或机器学习&#xff08;ML&#xff09;公司提供更低价、更有效率的算力资源…

MySQL--explain执行计划详解

什么是执行计划&#xff1f; SQL的执行计划&#xff0c;通俗来说就是SQL的执行情况&#xff0c;一条SQL语句扫描哪些表&#xff0c;那个子查询先执行&#xff0c;是否用到了索引等等&#xff0c;只有当我们知道了这些情况之后才知道&#xff0c;才可以更好的去优化SQL&#xf…

一劳永逸的方法解决:LNK1168无法打开 xxx.exe 进行写入 报错问题

这种错误的产生原因&#xff1a; 运行程序退出不是按正常流退出&#xff0c;是按窗口右上角的 “X” 来关闭程序&#xff0c;但是后台的xxx.exe控制台程序还在运行&#xff1b;修改程序的代码后再运行&#xff0c;就会报LNK1168的错误&#xff1b; 报错示例&#xff1a; 解决方…