数据结构-稀疏数组

文章目录

  • 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.mzph.cn/news/736186.shtml

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

相关文章

活体检测(点头,摇头,张嘴等动态识别)

活体检测&#xff08;点头&#xff0c;摇头&#xff0c;张嘴等动态识别&#xff09; 某本书里有一句话&#xff0c;等我去读、去拍案。 田间的野老&#xff0c;等我去了解、去惊识。 山风与发&#xff0c;冷泉与舌&#xff0c; 流云与眼&#xff0c;松涛与耳&#xff0c; 他们等…

21、状态模式(行为性模式)

版本一、get状态指针 #include <iostream> using namespace std;//前置声明 class Context;//状态 class State{ public://4个状态virtual void toUp (Context& context){ }virtual void toDown (Context& context){ }virtual void toLeft (Context& cont…

架构学习总结:企业架构=业务+数据+技术+应用架构

最近再次研读DAMA数据管理知识体系,结合工作对什么是企业架构?如何开展企业架构设计工作有一些新的认识,供大家参考。企业架构包括企业的业务架构、数据架构、技术架构和应用架构,要想做好企业的信息化数字化建设规划,这四个架构都不可缺少,这四个方面的内容共同组成了企…

[云原生] k8s配置资源管理

一、Secret的资源配置 1.1 Secret配置的相关说明 Secret 是用来保存密码、token、密钥等敏感数据的 k8s 资源&#xff0c;这类数据虽然也可以存放在 Pod 或者镜像中&#xff0c;但是放在 Secret 中是为了更方便的控制如何使用数据&#xff0c;并减少暴露的风险。 Secret 有…

【JavaSE】抽象类与接口

Object 类 类 java.lang.Object是类层次结构的根类&#xff0c;即所有类的父类。 除Object类之外的任何一个Java类&#xff0c;全部直接或间接的继承于Object类。由此&#xff0c;Object类也被称为根父类。Object类中声明的成员具有通用性&#xff0c;并且Object类中没有声明…

300W-500W-700W-1000W超薄制动电阻

EAK制动电阻&#xff0c;最大连续功率&#xff1a;300 W--1000W 制动电阻器&#xff0c;用于带有中低功率变频器 或作为充电电阻器的驱动器。 安装在变频器附近。 防护等级 IP 20 / IP 54 可根据要求提供更高的防护等级 测试电压 2.5 kV AC 可根据要求提供其他容量和安装…

SMART PLC自适应低通滤波器(收放卷线速度滤波)

一阶低通滤波器更多内容请参考信号处理专栏相关文章,常用链接如下: 1、SMART PLC 低通滤波器和模拟量采集应用 https://rxxw-control.blog.csdn.net/article/details/136595982https://rxxw-control.blog.csdn.net/article/details/1365959822、SMART PLC双线性变换和后向差…

leetcode 第388场周赛第三题

这道题有很多人都用的什么字符串哈希或者别的一些法子&#xff0c;这里作者用了暴力的解法。 思路&#xff1a;关键点在于我们怎么存储所给出的字符串容器中每个字符串的子串的编号并加以处理。 这里用到了一种嵌套容器&#xff1a;vector<map<string,int>>&…

leetcode 第388场周赛第一题

这里用贪心的算法就很容易能够算出来结果。 思路&#xff1a;我们知道&#xff0c;要想装的箱子数最少&#xff0c;我们需要先把大容量的箱子用上&#xff0c;然后再用小的这样才能实现局部最优。 那么我们直接对于箱子的容量进行排序&#xff0c;然后从大容量的箱子开始装就…

Docker笔记-进入运行中的镜像,查看日志等操作

docker搭建好后&#xff0c;查看运行的docker镜像&#xff1a; docker ps -a 进入运行的容器&#xff0c;命令如下&#xff1a; docker exec -it <容器ID> /bin/bash # 或者&#xff0c;直接用容器里面的命令&#xff0c;比如mysql镜像 docker exec -it <容器ID>…

Apache Maven是什么?|Maven安装

Apache Maven是一款流行的Java项目管理和构建工具&#xff0c;用于自动化构建过程&#xff0c;包括编译、测试、打包、依赖管理和发布等工作。以下是Maven安装步骤解析&#xff1a; 在Windows系统中安装Maven 下载Maven&#xff1a; 访问Maven官方网站&#xff08;https://mav…

网络协议常见问题

网络协议常见问题 OSI&#xff08;Open Systems Interconnection&#xff09;模型OSI 封装 TCP/IP协议栈IP数据报的报头TCP头格式UDP头格式TCP (3-way shake)三次握手建立连接&#xff1a;为什么三次握手才可以初始化 Socket、序列号和窗口大小并建立 TCP 连接。每次建立TCP连接…

蓝桥杯单片机---第十二届省赛题目解析

文章目录 比赛题目一、代码相关定义、声明1.头文件声明2.变量声明 二、主要函数1.main函数2.按键扫描3.数码管显示4.电压模式1、2输出 & LED显示5.定时器中断6.消除85C显示 三、次要函数1.初始化函数Init2.按键函数Key3.LED函数Led4.数码管函数Seg5.iic函数中6.onewire函数…

Spring Security之基于方法配置权限

前言 Spring Security有两种配置方式&#xff0c;今天重点是绍基于方法配置的方式。 基于方法配置权限 这个主要是有一些注解提供给大家使用&#xff0c;今天来给大家一个demo&#xff08;参考自官方sample&#xff09;。 maven就不多累赘了。重点看看配置。 基于角色配置…

【LeetCode】17.电话号码的字母组合

题目 链接&#xff1a;17. 电话号码的字母组合 - 力扣&#xff08;LeetCode&#xff09; 给定一个仅包含数字2-9的字符串&#xff0c;返回所有它能表示的字母组合。答案可以按任意顺序返回 给出数字到字母的映射如下&#xff08;与电话按键相同&#xff09;。注意 1 不对应任何…

Vue ECharts line3D点击空白处重置图表视角- 附完整示例

ECharts&#xff1a;一个基于 JavaScript 的开源可视化图表库。 目录 效果 一、介绍 1、官方文档&#xff1a;Apache ECharts 2、官方示例 二、准备工作 1、安装依赖包 2、示例版本 三、使用步骤 1、在单页面引入 echarts 2、指定容器并设置容器宽高 3、数据处理&…

leetcode 热题 100_反转链表

题解一&#xff1a; 迭代&#xff1a;逐步修改节点指针&#xff0c;注意在修改前要保存下一个节点指针。 class Solution {public ListNode reverseList(ListNode head) {ListNode pre null;while (head! null) {ListNode temp head.next;head.next pre;pre head;head te…

使用Canvas绘制一个自适应长度的折线图

要求x轴根据数据长度自适应 y轴根据数据最大值取长度值 <template><div ref"cvsContainer" class"cvs-container"><canvas ref"cvs" class"canvas"></canvas></div> </template><script set…

【Golang星辰图】Go语言之光照耀数据科学:揭开强大库的神秘面纱

Go语言赋能数据科学&#xff1a;探索多样化工具的无限可能 前言 在数据科学和分析领域&#xff0c;使用合适的工具和库对数据进行处理、分析和建模至关重要。本文将介绍一系列功能强大的Go语言库&#xff0c;涵盖了特征值分解、矩阵运算、深度学习、机器学习以及统计分析等方…

Chapter20-Ideal gases-CIE课本要点摘录、总结

20.1 Particles of a gas Brownian motion Fast modules 速率的数值大概了解下&#xff1a; average speed of the molecules:400m/s speed of sound:approximately 330m/s at STP&#xff08;standard temperature and pressure&#xff09; Standard Temperature and Pres…