02稀疏数组(java版本)
1 package com.aixuexi.contact;
2
3 public class SpareArray {
4 public static void main(String[] args) {
5
6 // 创建一个原始的二维数组 11 * 11
7 int arrchess1[][] = new int[11][11];
8 //二维数组 赋值
9 arrchess1[1][2] = 1;
10 arrchess1[2][3] = 2;
11 arrchess1[4][5] = 1;
12 arrchess1[8][5] = 2;
13 // 输出原始的二维数组
14 System.out.println("====原始数组==== ");
15 for(int i = 0; i < 11; i++) {
16 for(int j= 0; j < 11; j++) {
17 System.out.printf("%d ",arrchess1[i][j]);
18 }
19 System.out.println();
20 }
21 // 将二维数组 转 稀疏数组
22 System.out.println("====稀疏数组==== ");
23 // 1)统计个数 count
24 int sum = 0;
25 for(int i = 0; i < 11; i++) {
26 for(int j = 0; j< 11; j++) {
27 if(arrchess1[i][j] != 0) {
28 sum++;
29 }
30 }
31 }
32 System.out.println("稀疏数组个数是:"+ sum);
33 // 2)创建对应的稀疏数组 、赋值
34 int sparearray[][] = new int[sum+1][3];
35 sparearray[0][0] = 11; //行
36 sparearray[0][1] = 11; //列
37 sparearray[0][2] = sum; //个数
38 //遍历原来的二维数组,将非0的值存放到 sparseArr中
39 int count = 0;
40 for(int i = 0; i < 11; i++) {
41 for(int j = 0; j < 11; j++) {
42 if(arrchess1[i][j] != 0) { //按行给稀疏数组赋值
43 count++; //第0行已经存放数据了 从第一行开始
44 sparearray[count][0] = i;
45 sparearray[count][1] = j;
46 sparearray[count][2] = arrchess1[i][j]; //注意点:--原来的-- 不要搞混
47 }
48 }
49 }
50 // 3)打印稀疏数组
51 for(int i = 0; i < sum + 1; i++) {
52 for(int j = 0; j < 3; j++) {
53 System.out.printf("%d\t",sparearray[i][j]);
54 }
55 System.out.println();
56 }
57 System.out.println();
58 //将稀疏数组 --》 恢复成 原始的二维数组
59 //1)1. 先读取稀疏数组的第一行,根据第一行的数据,创建原始的二维数组
60 int arrchess2[][] = new int[sparearray[0][0]][sparearray[0][1]];
61 //2)2. 在读取稀疏数组后几行的数据(从第二行开始),并赋给 原始的二维数组 即可
62 for(int i = 1; i < sparearray.length;i++) { // 注意:遍历sparearray 别弄错成 arrchess2
63 arrchess2[sparearray[i][0]] [sparearray[i][1]] = sparearray[i][2];
64 }
65
66 System.out.println("====恢复的稀疏数组==== ");
67 for(int i = 0; i < 11; i++) {
68 for(int j= 0; j < 11; j++) {
69 System.out.printf("%d ",arrchess2[i][j]);
70 }
71 System.out.println();
72 }
73
74 System.out.println("hello..");
75 }
76 }
02稀疏数组(java版本)的更多相关文章
- java算法--稀疏数组
数据结构必要知识 线性结构 线性结构是最常用的数据结构,数据元素之间存在一对一的线性关系. 线性结构有两种不同的存储结构,即顺序存储结构和链式存储结构.顺序存储的线性表称为顺序表,顺序表中的存储元素是 ...
- 数据结构与算法之java语言实现(一):稀疏数组
一.概念&引入 什么是稀疏数组? 稀疏数组是面对一个二维数组中有众多重复元素的情况下,为了节省磁盘空间,将此二维数组转化为更加节省空间的一种数组,我们叫他稀疏数组. 只是听概念或许会看不明白, ...
- 图解Java数据结构之稀疏数组
在编程中,算法的重要性不言而喻,没有算法的程序是没有灵魂的.可见算法的重要性. 然而,在学习算法之前我们需要掌握数据结构,数据结构是算法的基础. 我在大学的时候,学校里的数据结构是用C语言教的,因为对 ...
- 【学习总结】java数据结构和算法-第三章-稀疏数组和队列
相关链接 [学习总结]尚硅谷2019java数据结构和算法 github:javaDSA 目录 稀疏数组 队列 稀疏数组 稀疏数组介绍 图示 应用实例 代码实现 SparseArray.java:与二 ...
- Java数组声明创建和使用以及多维数组、Arrays类、稀疏数组
目录 数组概述 数组声明创建 内存分析 java内存分析 堆 栈 方法区 三种初始化 静态初始化 动态初始化 数组的默认初始化 数组的四个基本特点 数组边界 小结: 数组使用 数组基础使用 For E ...
- Java的稀疏数组的简单代码实现
目录 Java的稀疏数组的简单代码实现 一.稀疏数组的基本概念 二.稀疏数组的Java代码实现思路 三.稀释数组的Java代码实现 四.结语 Java的稀疏数组的简单代码实现 一.稀疏数组的基本概念 ...
- 数据结构(1):稀疏数组使用java实现
主要是用于数组压缩,去除无效的数组内容: 原数组内容: 0 0 0 0 0 0 1 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 转换成 稀疏数组 5 5 2 1 1 1 2 ...
- java基础——多维数组和稀疏数组
多维数组 多维数组可以堪称数组的数组,比如二维数组就是一个特殊的一维数组,其中每一个元素都是一个以为数组 而且数组 int a[][]= new int[2][3]; public class Arr ...
- Java数组07——稀疏数组
稀疏数组 总结: 记录有效的坐标: 记录原始做表的大小和有效值的个数 记录每一个有效值的坐标 ,变成一个新的数组 age: package array; public class ArrayDe ...
随机推荐
- java打入jar包
首先在项目下创建一个文件夹,保存我们的jar包. 在项目名上右击,依次点击[New]-->[Floder],打开新建文件夹窗口 输入文件夹名称[lib],点击[ok].我们通常在lib文件夹中存 ...
- mq 的缺点?
(1)系统可用性降低 系统引入的外部依赖越多,越容易挂掉,本来你就是 A 系统调用 BCD 三个系统的接口就好了,人 ABCD 四个系统好好的,没啥问题,你偏加个 MQ 进来,万一MQ 挂了咋整?MQ ...
- Could not find the main class
最近开发了一个短信报警的服务,打成程序包之后,再本地windows启动(start.bat)没有问题,但是发到生产环境,报如下错: Could not find the main class 莫名其妙 ...
- JDBC几个接口分区叫什么?它们分别有什么用?
DirverManager类:是JDBC的管理层,作用于用户和驱动之间.该类负责注册和加载JDBC驱动.Connection接口:代表与数据库的链接,并拥有创建SQL语句的方法,以完成基本的SQL操作 ...
- 重载(Overload)和重写(Override)的区别。重载的 方法能否根据返回类型进行区分?
方法的重载和重写都是实现多态的方式,区别在于前者实现的是编译时的多态性,而后者实现的是运行时的多态性.重载发生在一个类中,同名的方法如果有不同的参数列表(参数类型不同.参数个数不同或者二者都不同)则视 ...
- Java 进程和线程
进程和线程 在并发编程中,有两个基本的执行单元:进程和线程.在Java编程语言中,通常并发编程主要与线程有关.但是进程也很重要. 计算机系统通常具有许多活动的进程和线程.即使在只有一个执行核心,因此在 ...
- prometheus-存储
采集到的样本以时间序列的方式保存在内存(TSDB 时序数据库)中,并定时保存到硬盘中 prometheus一般会保留15天 prometheus按照block块的方式来存储数据,每2小时为一个时间单位 ...
- js获取元素本身相关值
Element.getBoundingClientRect()方法返回元素的大小及其相对于视口的位置. getClientRects() 方法返回的一组矩形的集合, 即:是与该元素相关的CSS 边框集 ...
- RocketMQ实现分布式事务
相关文章:http://www.uml.org.cn/zjjs/201810091.asp(深入理解分布式事务,高并发下分布式事务的解决方案) 三种分布式事务: 1.基于XA协议的两阶段提交 2.消息 ...
- Vue-router实现单页面应用在没有登录情况下,自动跳转到登录页面
这是我做前端一来的第一篇文章,都不知道该怎么开始了.那就直接奔主题吧.先讲讲这个功能的实现场景吧,我们小组使用vue全家桶实现了一个单页面应用,最初就考虑对登录状态做限制.比如登录后不能后退到登录页面 ...