了解稀疏数组

稀疏数组(一种数据结构)

1
2

package com.mypackage.array;public class Demo08 {public static void main(String[] args) {//1.创建一个二维数组  11*11// 0:没有棋子   1:黑棋  2:白棋int[][] array1 = new int[11][11];array1[1][2] = 1;array1[2][3] = 2;//一、输出原始的数组System.out.println("输出原始数组:");printArray2(array1);System.out.println("=============================");//二、转换为稀疏数组来保存//1.先获取有效值的个数int sum = 0;for (int i = 0; i < 11; i++) {for (int j = 0; j < 11; j++) {if (array1[i][j] != 0){sum++;}}}System.out.println("有效值的个数:"+sum);//2.再创建一个稀疏数组int[][] array2= new int[sum+1][3];array2[0][0] = 11;array2[0][1] = 11;array2[0][2] = sum;//3.遍历二维数组,将非零的值放进稀疏数组中int count = 0;for (int i = 0; i < array1.length; i++) {for (int j = 0; j < array1[i].length; j++) {if (array1[i][j] != 0){count ++;array2[count][0] = i;array2[count][1] = j;array2[count][2] = array1[i][j];}}}//4.输出稀疏数组System.out.println("输出稀疏数组:");printArray2(array2);System.out.println("=================");//三、将稀疏数组还原System.out.println("还原稀疏数组:");//1.先读取稀疏数组int[][] array3= new int[array2[0][0]][array2[0][1]];//2.给其中的元素还原它的值for (int i = 1; i < array2.length; i++) {array3[array2[i][0]][array2[i][1]] = array2[i][2];}//3.打印System.out.println("输出还原的数组:");printArray2(array3);}public static void printArray2(int[][] array){for (int[] ints : array) {for (int anInt : ints) {System.out.print(anInt+"\t");}System.out.println();}}
}//输出
输出原始数组:
0	0	0	0	0	0	0	0	0	0	0	
0	0	1	0	0	0	0	0	0	0	0	
0	0	0	2	0	0	0	0	0	0	0	
0	0	0	0	0	0	0	0	0	0	0	
0	0	0	0	0	0	0	0	0	0	0	
0	0	0	0	0	0	0	0	0	0	0	
0	0	0	0	0	0	0	0	0	0	0	
0	0	0	0	0	0	0	0	0	0	0	
0	0	0	0	0	0	0	0	0	0	0	
0	0	0	0	0	0	0	0	0	0	0	
0	0	0	0	0	0	0	0	0	0	0	
=============================
有效值的个数:2
输出稀疏数组:
11	11	2	
1	2	1	
2	3	2	
=================
还原稀疏数组:
输出还原的数组:
0	0	0	0	0	0	0	0	0	0	0	
0	0	1	0	0	0	0	0	0	0	0	
0	0	0	2	0	0	0	0	0	0	0	
0	0	0	0	0	0	0	0	0	0	0	
0	0	0	0	0	0	0	0	0	0	0	
0	0	0	0	0	0	0	0	0	0	0	
0	0	0	0	0	0	0	0	0	0	0	
0	0	0	0	0	0	0	0	0	0	0	
0	0	0	0	0	0	0	0	0	0	0	
0	0	0	0	0	0	0	0	0	0	0	
0	0	0	0	0	0	0	0	0	0	0	进程已结束,退出代码0

(心得分析)详细讲解一下代码如下:

package com.mypackage.array;public class Demo08 {public static void main(String[] args) {//1.创建一个二维数组  11*11// 0:没有棋子   1:黑棋  2:白棋int[][] array1 = new int[11][11];array1[1][2] = 1;array1[2][3] = 2;//一、输出原始的数组System.out.println("输出原始数组:");printArray2(array1);System.out.println("=============================");//二、转换为稀疏数组来保存//1.先获取有效值的个数int sum = 0;for (int i = 0; i < 11; i++) {for (int j = 0; j < 11; j++) {if (array1[i][j] != 0){sum++;}}}System.out.println("有效值的个数:"+sum);//2.再写出稀疏数组的第0行int[][] array2= new int[sum+1][3];array2[0][0] = 11;array2[0][1] = 11;array2[0][2] = sum;//3.遍历二维数组,将非零的值放进稀疏数组中,写出稀疏数组第0行以下的数/*二维数组的第一个括号代表行数,也就是竖着的长度;第二个括号代表列数,也就是横着的长度array.length代表的是二维数组的行数array[i].length才是代表它的列数*/int count = 0;for (int i = 0; i < array1.length; i++) {for (int j = 0; j < array1[i].length; j++) {if (array1[i][j] != 0){count ++;array2[count][0] = i;array2[count][1] = j;array2[count][2] = array1[i][j];}}}/*原数组如下:0	0	0	0	0	0	0	0	0	0	00	0	1	0	0	0	0	0	0	0	00	0	0	2	0	0	0	0	0	0	00	0	0	0	0	0	0	0	0	0	00	0	0	0	0	0	0	0	0	0	00	0	0	0	0	0	0	0	0	0	00	0	0	0	0	0	0	0	0	0	00	0	0	0	0	0	0	0	0	0	00	0	0	0	0	0	0	0	0	0	00	0	0	0	0	0	0	0	0	0	00	0	0	0	0	0	0	0	0	0	0*//*在某一行中,遇到一个不为0的数,count++。比如:在第1行第2列中也就是i=1、j=2时就遇到了第一个不为0的数,那么此时count++变成1,稀疏数组的第1行的每个数就有了着落,稀疏数组的第1行第0列,也就是array2[1][0],它的值就是原数组的行数,也就是1;稀疏数组的第1行第1列,也就是array2[1][1],它的值就是原数组的列数,也就是2;稀疏数组的第1行第2列,也就是array2[1][2],它的值就是原数组的此位置的值,也就是1。*//*依次类推,得出稀疏数组如下:11	11	21	2	12	3	2*///4.输出稀疏数组System.out.println("输出稀疏数组:");printArray2(array2);System.out.println("=================");//三、将稀疏数组还原System.out.println("还原稀疏数组:");//1.先读取稀疏数组int[][] array3= new int[array2[0][0]][array2[0][1]];/*array[0][0]就是原数组的行数,array[0][1]就是原数组的列数。这一步读取稀疏数组,可以将原数组的长宽读取回来*///2.给其中的元素还原它的值for (int i = 1; i < array2.length; i++) {array3[array2[i][0]][array2[i][1]] = array2[i][2];}/*int i = 1,把i初始化为1,是因为稀疏数组的第1行开始才是有效值,稀疏数组的第0行是行数列数以及有效值个数。以上面的稀疏数组为例:11	11	21	2	12	3	2*//*i = 1时,array3[array[1][0]][array2[1][1]] = array2[1][2];也就是,array3[1][2] = 1;同样的,array3[2][3] = 2;这样,原数组的两个有效值就被填充回去了,我们只需要吧有效值的位置填充一下就行,剩下的位置直接默认被0填充满。*///3.打印System.out.println("输出还原的数组:");printArray2(array3);}//创建一个用来打印数组的方法,节省代码量public static void printArray2(int[][] array){for (int[] ints : array) {for (int anInt : ints) {System.out.print(anInt+"\t");}System.out.println();}}
}

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

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

相关文章

Redis总结(一)

目录 Redis简介 为什么使用Redis作为MySQL的缓存&#xff1f; 高性能 高并发 Redis数据结构及其使用场景分别是什么&#xff1f; String&#xff08;字符串&#xff09; 内部实现 常用命令 普通字符串基本操作 批量设置 计数器&#xff08;字符串内容为整数时使用&a…

学习网络编程No.6【将服务器日志和守护进程化】

引言&#xff1a; 北京时间&#xff1a;2023/9/1/21:15&#xff0c;下午刚更新完博客&#xff0c;同理再接再厉&#xff0c;这样整天不需要干什么&#xff0c;除了玩手机的日子不多了&#xff0c;马上就要开学&#xff0c;每天需要签到签退的日子就要来临&#xff0c;烦躁&…

每日刷题-5

目录 一、选择题 二、算法题 1、不要二 2、把字符串转换成整数 一、选择题 1、 解析&#xff1a;printf(格式化串&#xff0c;参数1&#xff0c;参数2,.….)&#xff0c;格式化串: printf第一个参数之后的参数要按照什么格式打印&#xff0c;比如%d--->按照整形方式打印&am…

基于人体呼出气体的电子鼻系统的设计与实现

基于人体呼出气体的电子鼻系统的设计与实现 摘要 电子鼻技术是通过模式识别技术对传感器采集的人体呼出气体进行分类训练的方法。本文研究实现的电子鼻系统包括下面几个部分:首先搭建以Arduino为控制核心的气路采集装置&#xff0c;包括MOS传感器和双阀储气袋构建的传感器阵列和…

【python绘图—colorbar操作学习】

文章目录 Colorbar的作用Colorbar的操作截取cmap拼接cmap双刻度列colorbar 引用 Colorbar的作用 Colorbar&#xff08;颜色条&#xff09;在绘图中的作用非常重要&#xff0c;它主要用于以下几个方面&#xff1a; 表示数据范围&#xff1a; Colorbar可以显示图中的颜色映射范围…

使用内网端口映射方案,轻松实现U8用友ERP的本地部署异地远程访问——“cpolar内网穿透”

文章目录 前言1. 服务器本机安装U8并调试设置2. 用友U8借助cpolar实现企业远程办公2.1 在被控端电脑上&#xff0c;点击开始菜单栏&#xff0c;打开设置——系统2.2 找到远程桌面2.3 启用远程桌面 3. 安装cpolar内网穿透3.1 注册cpolar账号3.2 下载cpolar客户端 4. 获取远程桌面…

对抗生成网络总结

对一些基本的对抗生成网络的总结。部分内容整理自Teeyohuang’s blog 文章目录 GAN (NeurIPS, 2014)CGANDCGANStackGANPix2Pix (CVPR, 2017)CycleGAN (ICCV, 2017)SRGAN (CVPR, 2017)StyleGAN (CVPR, 2019) GAN (NeurIPS, 2014) Generative adversarial nets m i n G m a x D …

Flutter的oktoast插件详解

文章目录 简介详细介绍安装和导入导入在MaterialApp外面套一层OKToast组件为什么是包住MaterialApp&#xff1f; 显示Toast消息&#xff1a; 高级使用Toast位置Toast持续时间自定义Toast样式高级用法 使用场景提示消息表单验证操作反馈网络请求状态调试信息小结 总结 简介 okt…

虚拟人三维动画宣传片案例分享 | 广州“五羊”城市文化IP商业体裸眼3D广告影片

随着时代的发展元宇宙的助推&#xff0c;裸眼3D形式的宣传方式逐渐出现在大众眼前。以数字人IP的3D立体效果吸引大众目光&#xff0c;让其驻足拍照、录视频分享至社交平台&#xff0c;为企业品牌带来高频传播价值。 近日&#xff0c;广州“五羊”城市文化IP裸眼3D广告宣传片在广…

LeetCode算法心得——和可被 K 整除的子数组(前缀和+HashMap)

大家好&#xff0c;我是晴天学长&#xff0c;同余定理的应用&#xff0c;需要的小伙伴可以关注支持一下哦&#xff01;后续会继续更新的。 1) .和可被 K 整除的子数组 题目描述 给定一个整数数组 A&#xff0c;返回其中元素之和可被 K 整除的&#xff08;连续、非空&#xff0…

使用k8s helm离线部署spark-operator(私有仓库)

制作镜像 docker pull ghcr.io/googlecloudplatform/spark-operator:v1beta2-1.3.8-3.1.1 docker images docker save ImageID > ./spark.tar将制作的镜像上传到目的机器中&#xff0c;加载镜像 docker load < ./spark.tar打标签其中xxxx.xxx/xx/为私有仓库的地址 doc…

尚硅谷大数据项目《在线教育之实时数仓》笔记001

视频地址&#xff1a;尚硅谷大数据项目《在线教育之实时数仓》_哔哩哔哩_bilibili 目录 P001 P002 P003 P004 P005 P001 以在线教育采集系统和离线数仓为前置基础&#xff0c;分为三个部分讲解&#xff1a;实时数仓架构介绍、数仓模型搭建、Suger可视化大屏展示。 P002 P0…