数据结构 二维数组-->稀疏数组-->二维数组
稀疏数组基本概念:
稀疏数组应用场景:
当一个数组大部分的元素为"0",或者为同一个值的数组时,可以使用稀疏数组来保存该数组
处理方法:
1>记录数组一共有几行几列,有多少不同的值
2>把具有不同值的元素行列及值记录在一个小规模数组中,从而缩小程序规模
row col val
[0] 总行 总列 有效数量
[1] 第一个数据行 第一个数据列 第一个数据值
[2] 第二个数据行 第二个数据列 第二个数据值
二维数组==>稀疏数组思路:
1>遍历原始二维数组,得到有效数字的个数:sum (sum为变量名可自定义)
2>根据sum创建稀疏数组sparseArray int[sum+1][3]
3>再次遍历原始数组将二维数组有效数据存入稀疏数组
代码实现:
int[][] array01 = new int [11][11];
array01[0][1] = 1;
array01[1][2] = 2;
Integer sum = 0;
for(int i = 0; i<array01.length;i++) {
for(int j = 0;j<array01[i].length;j++) {
if(array01[i][j]!=0) {
sum++;
}
}
}
int [][] array02 = new int[sum+1][3];
array02[0][0] = array01.length;
array02[0][1] = array01[0].length;
array02[0][2] = sum;
Integer sum2 = 0;
for(int i = 0; i<array01.length;i++) {
for(int j = 0;j<array01[i].length;j++) {
if(array01[i][j]!=0) {
sum2++;
array02[sum2][0] = i;
array02[sum2][1] = j;
array02[sum2][2] = array01[i][j];
}
}
}
稀疏数组==>二维数组思路
1>先读取稀疏数组第一行,根据第一行数据创建原始的二维数组
2>在读取稀疏数组后几行的数据,并赋给原始的二维数组
代码实现
int [][]array03 = new int[array02[0][0]][array02[0][1]];
for(int i = 1;i<array02.length;i++) {
array03[array02[i][0]][array02[i][1]] = array02[i][2];
}
数据结构 二维数组-->稀疏数组-->二维数组的更多相关文章
- [zt]C++二维数组讲解、二维数组的声明和初始化
定义: int *pia = new int[10]; // array of 10 uninitialized ints 此 new 表达式分配了一个含有 10 个 int 型元素的数组,并返回指向 ...
- PHP如何判断一个数组是一维数组或者是二维数组?用什么函数?
如题:如何判断一个数组是一维数组或者是二维数组?用什么函数? 判断数量即可 <?php if (count($array) == count($array, 1)) { echo '是一维数组' ...
- C语言数组:C语言数组定义、二维数组、动态数组、字符串数组
1.C语言数组的概念 在<更加优美的C语言输出>一节中我们举了一个例子,是输出一个 4×4 的整数矩阵,代码如下: #include <stdio.h> #include &l ...
- C++二维数组、指针、对象数组、对象指针
项目中用到,随手记一下: 1.二维数组.与指针 创建二维数组指针的方式: a.已知一维的大小 1 int **array=new int *[rows]; 2 (for int i=0;i<ro ...
- 《剑指Offer》第1题(Java实现):在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
一.题目描述 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该 ...
- 剑指Offer 1. 二维数组中的查找 (数组)
题目描述 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数 ...
- 06-01 Java 二维数组格式、二维数组内存图解、二维数组操作
二维数组格式1 /* 二维数组:就是元素为一维数组的一个数组. 格式1: 数据类型[][] 数组名 = new 数据类型[m][n]; m:表示这个二维数组有多少个一维数组. n:表示每一个一维数组的 ...
- C/C++——二维数组与指针、指针数组、数组指针(行指针)、二级指针的用法
本文转载自:https://blog.csdn.net/qq_33573235/article/details/79530792 1. 二维数组和指针 要用指针处理二维数组,首先要解决从存储的角度对二 ...
- C++二维数组讲解、二维数组的声明和初始化
我们知道,一维空间是一条线,数学中用一条数轴来表达:二维空间是一个平面,数学中用平面坐标系来表达.那么二维数组又是什么样的呢? 线与面 我们用一个下标来描述一维数组中的某个元素,就好像在用数描述一条线 ...
随机推荐
- 微信 HTML5 VIDEO 视频播放解决方案
原文链接:https://www.jianshu.com/p/e4573acf6564 webkit-playsinline && playsinline="true&quo ...
- 我们基于kaldi开发的嵌入式语音识别系统升级成深度学习啦
先前的文章<三个小白是如何在三个月内搭一个基于kaldi的嵌入式在线语音识别系统的>说我们花了不到三个月的时间搭了一个基于kaldi的嵌入式语音识别系统,不过它是基于传统的GMM-HMM的 ...
- 使用 Postman 测试你的 API
使用 Postman 测试你的 API Intro 最近想对 API 做一些自动化测试,看了几个工具,最后选择了 postman,感觉 postman 的设计更好一些,我们可以在请求发送之前和请求获取 ...
- TypeScript躬行记(8)——装饰器
装饰器(Decorator)可声明在类及其成员(例如属性.方法等)之上,为它们提供一种标注,用于分离复杂逻辑或附加额外逻辑,其语法形式为@expression.expression是一个会在运行时被调 ...
- beta week 1/2 Scrum立会报告+燃尽图 01
此作业要求参见:https://edu.cnblogs.com/campus/nenu/2019fall/homework/9911 git地址:https://e.coding.net/Eustia ...
- .NET Core 3 WPF MVVM框架 Prism系列之命令
本文将介绍如何在.NET Core3环境下使用MVVM框架Prism的命令的用法 一.创建DelegateCommand命令 我们在上一篇.NET Core 3 WPF MVVM框架 Prism系列之 ...
- VC/c++版本获取现行时间戳精确到毫秒
时间戳是指格林威治时间1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)起至现在的总秒数.通俗的讲, 时间戳是一份能够表示一份数据在一个特定时间点已经存在的完 ...
- .net core试水
概述 大概记录下我如何第一次使用.net core搭建一个api,由于最近.net core比较火,我也尝试着使用.net core做了一个小功能 本文主要包括 1.环境配置 2.程序编写 3.程序部 ...
- samba服务器红帽5.4搭建,亲测可用!!!
samba服务器搭建 服务器的环境 红帽5.4 vm15 挂载光盘 mount mount -t iso9660 设备目录 /mnt 表示挂载 软件包安装 samba服务器只需安装两个软件包,先找到软 ...
- linux installer os的驱动更新
installer os的驱动更新 linux系统可以简单的分为installer OS与运行时的OS,安装阶段识别不到硬件设备大概率因为installers OS版本较低,没有驱动来识别新的硬件,可 ...