稀疏数组基本概念:
  稀疏数组应用场景:
      当一个数组大部分的元素为"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];
}

  

数据结构 二维数组-->稀疏数组-->二维数组的更多相关文章

  1. [zt]C++二维数组讲解、二维数组的声明和初始化

    定义: int *pia = new int[10]; // array of 10 uninitialized ints 此 new 表达式分配了一个含有 10 个 int 型元素的数组,并返回指向 ...

  2. PHP如何判断一个数组是一维数组或者是二维数组?用什么函数?

    如题:如何判断一个数组是一维数组或者是二维数组?用什么函数? 判断数量即可 <?php if (count($array) == count($array, 1)) { echo '是一维数组' ...

  3. C语言数组:C语言数组定义、二维数组、动态数组、字符串数组

    1.C语言数组的概念 在<更加优美的C语言输出>一节中我们举了一个例子,是输出一个 4×4 的整数矩阵,代码如下: #include <stdio.h> #include &l ...

  4. C++二维数组、指针、对象数组、对象指针

    项目中用到,随手记一下: 1.二维数组.与指针 创建二维数组指针的方式: a.已知一维的大小 1 int **array=new int *[rows]; 2 (for int i=0;i<ro ...

  5. 《剑指Offer》第1题(Java实现):在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。

    一.题目描述 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该 ...

  6. 剑指Offer 1. 二维数组中的查找 (数组)

    题目描述 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数 ...

  7. 06-01 Java 二维数组格式、二维数组内存图解、二维数组操作

    二维数组格式1 /* 二维数组:就是元素为一维数组的一个数组. 格式1: 数据类型[][] 数组名 = new 数据类型[m][n]; m:表示这个二维数组有多少个一维数组. n:表示每一个一维数组的 ...

  8. C/C++——二维数组与指针、指针数组、数组指针(行指针)、二级指针的用法

    本文转载自:https://blog.csdn.net/qq_33573235/article/details/79530792 1. 二维数组和指针 要用指针处理二维数组,首先要解决从存储的角度对二 ...

  9. C++二维数组讲解、二维数组的声明和初始化

    我们知道,一维空间是一条线,数学中用一条数轴来表达:二维空间是一个平面,数学中用平面坐标系来表达.那么二维数组又是什么样的呢? 线与面 我们用一个下标来描述一维数组中的某个元素,就好像在用数描述一条线 ...

随机推荐

  1. [板子]Kruskal

    众所周知求最小生成树的两种方法: 1.Kruskal 2.Prim 这里只挂第一种,因为noip掌握第一种就够了. 两种做法的区别可以参考这个博客:http://blog.csdn.net/molln ...

  2. PDF.JS 读取文件流前端展示 C#

    最近再搞PDF得展示问题,因为aspose.pdf成本太高,只能使用pdf.js这个开源强大的前端东东了. 在百度了很久后 网上大都是node,java,php的事例,有位大哥的是C#的后台代码按他写 ...

  3. linux包之下载curl-wget

    [root@localhost ~]# rpm -qa|grep curllibcurl-7.19.7-37.el6_4.x86_64python-pycurl-7.19.0-8.el6.x86_64 ...

  4. redis scan count的含义/二进制安全问题

    redis是单线程的,keys查询键类似hbase的全表扫描(也可以理解为select *),大数据量时非常耗时,因此官方给出了scan,使用scan类似数据库分页,可以指定查询多少个元素,官网的说明 ...

  5. Cisco DNA网络POC

    角色名词解释 拓扑图 集成ISE

  6. N9K 40G接口一分4*10G配置

    Breakout InterfacesCisco NX-OS supports the breakout of high bandwidth 40G interfaces at the module ...

  7. Jquery xhr2跨域

    相关享目托管在github: https://github.com/devgis/CSharpCodes

  8. Python7_内置函数总结

    Python Built-In 函数: str(obj) :输入(对象),返回一个对象的string格式: isinstance(object,classinfo):判断一个对象是否是一个已知的类型, ...

  9. 洛谷$P1345\ [USACO5.4]$ 奶牛的电信$Telecowmunication$ 网络流

    正解:最小割 解题报告: 传送门$QwQ$ $QwQ$好久没做网络流了来复健下. 这个一看就很最小割趴?考虑咋建图?就把点拆成边权为$1$的边,然后原有的边因为不能割所以边权为$inf$. 然后跑个最 ...

  10. BridgePattern(桥接模式)-----Java/.Net

    桥接(Bridge)是用于把抽象化与实现化解耦,使得二者可以独立变化.这种类型的设计模式属于结构型模式,它通过提供抽象化和实现化之间的桥接结构,来实现二者的解耦