了解稀疏数组

news/2024/11/24 21:59:55/

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

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.ppmy.cn/news/1109032.html

相关文章

Java+Tif图片转Jpg

Tif转Jpg使用心得&#xff1a; 如果tif图片需要压缩&#xff0c;或者需要做转换&#xff0c;常用方法&#xff1a; File file1 new File("E:\\www\\ffw\\images\\73.jpg");byte[] bigContent Files.readAllBytes(file1.toPath());ByteArrayInputStream byteArrayIn…

Django:二、模板、静态文件及请求相应

一、HTML 在app01中创建文件夹“templates”&#xff0c;在templates中创建HTML文件。 二、静态文件 创建静态文件夹&#xff0c;并把相关包导入 在HTML中引入Jquery等包&#xff0c;需要完成几步&#xff1a; 三、模板语法 1、字符串和列表 2、字典 3、if语句

elasticsearch集群部署-实操

elasticsearch&#xff08;集群&#xff09; 案例版本&#xff1a;elasticsearch 8.6.2 操作系统&#xff1a;CentOS 7 注意&#xff1a;全程使用普通用户操作。 0、节点信息 节点描述192.168.127.10master192.168.127.11slave…slave02 1、环境配置 1.1 修改文件 /etc/se…

uniapp-提现功能(demo)

页面布局 提现页面 有一个输入框 一个提现按钮 一段提现全部的文字 首先用v-model 和data内的数据双向绑定 输入框逻辑分析 输入框的逻辑 为了符合日常输出 所以要对输入框加一些条件限制 因为是提现 所以对输入的字符做筛选,只允许出现小数点和数字 这里用正则实现的小数点…

区间问题总结

一 尽量多的保留不重叠区间&#xff0c;右端点排序 435&#xff0c;无重叠区间 class Solution {/*给定一个区间的集合 intervals &#xff0c;其中 intervals[i] [starti, endi] 。返回 需要移除区间的最小数量&#xff0c;使剩余区间互不重叠 。贪心&#xff1a;预定会议问…

Trinitycore学习之windows上用cmake生成vs项目并尝试在windows上启动服务

0&#xff1a;参考 https://trinitycore.info/en/install/requirements/windows 参考该文章安装相关的工具&#xff0c;主要有boost&#xff0c;openssl&#xff0c;cmake&#xff0c;mysql&#xff0c;vs2022自己电脑已经安装。 1:安装mysql 用zip进行安装的方式&#xff…

自动化办公更简单了:新版python-office,有哪些更新?

#职场经验谈# 大家好&#xff0c;这里是程序员晚枫&#xff0c;小破站/小红薯都叫这个名。 去年4月开源了一个Python自动化办公项目&#xff1a;python-office&#xff0c;GitHub和Gitee都能看到。1行代码实现复杂的自动化办公任务&#xff0c;帮助不懂代码的小白&#xff0c;…

机器学习——K最近邻算法(KNN)

机器学习——K最近邻算法&#xff08;KNN&#xff09; 文章目录 前言一、原理二、距离度量方法2.1. 欧氏距离2.2. 曼哈顿距离2.3. 闵可夫斯基距离2.4. 余弦相似度2.5. 切比雪夫距离2.6. 马哈拉诺比斯距离2.7. 汉明距离 三、在MD编辑器中输入数学公式&#xff08;额外&#xff0…