理解数组----稀疏数组

理解数组----稀疏数组

先来说说最近的一些理解,希望对你也有启发:

1、程序是的存在是为了功能的实现,所以我们在学习的过程中先要理解功能实现原理,再记住关键代码过程;(也就是再初学阶段,现有学死—记住,才能学得灵活)

2、在学习一门语言的基本概念的时,**如何更高效?**应该先找到入门必须理解的相关概念,再上leedcode关键字搜索相关简单题目,没思路不要紧,就先看答案,把每一句代码看懂,理解代码逻辑,再记住,以此循环往复,据说至少要这样痛苦3个月==

3、算法和数据结构对我写java代码的意义是什么?

从分析问题的角度去理清数据结构和算法之间的关系。通常,每个问题的解决都经过以下两个步骤:
分析问题,从问题中提取出有价值的数据,将其存储;
对存储的数据进行处理,最终得出问题的答案;

数据结构负责解决第一个问题,即数据的存储问题。通过前面的学习我们知道,针对数据不同的逻辑结构和物理结构,可以选出最优的数据存储结构来存储数据。

而剩下的第二个问题,属于算法的职责范围。算法,从表面意思来理解,即解决问题的方法。我们知道,评价一个算法的好坏,取决于在解决相同问题的前提下,哪种算法的效率最高,而这里的效率指的就是处理数据、分析数据的能力。

因此我们得出这样的结论,数据结构用于解决数据存储问题,而算法用于处理和分析数据,它们是完全不同的两类学科。
以上来自摘抄,是在这位兄弟的帖子上找到了答案,感谢分享

原文链接:https://blog.csdn.net/alan711/article/details/86739788
———————————————

打印出一下原数组
在这里插入图片描述

将一下数组规模缩小为(稀疏列表)
在这里插入图片描述

打印原数组思路:

1、新建数组,并给有有效数字的数组坐标赋值

2、用foreach 遍历循环输出原数组所以元素

	public static void main(String[] args) {
		int[][] array1=new int[11][11];//记住新建一个数组时要给定数组大小
		array1[1][2]=1;
		array1[2][3]=2;
		System.out.println("请输出原始数组:");
		//foreach 遍历循环语句:
		for(int[] ints:array1) {//for(类型 变量名:集合) { 语句块;}
//			System.out.print(ints+"\t");
	//ints 不是循环变量,它保存了集合中的元素,for-each 语句将集合中的元素一一取出来,并保存到ints 中
    /*二维数组遍历一次是地址,遍历第二次才是具体的值,二维数组本质是在一个数组里嵌套一个数组,一个数组就是一个集合。
	array1是一个二维数组,遍历第一次:ints里面存着每一行的地址,地址里面本上也存的是集合。
	再将ints集合里的值遍历,遍历之后的每一个元素存储在anInt里面,最后anInt里面存储的是具体数值并输出*/
	//每行前多了地址[I@7637f22	0	0	0	0	0	0	0	0	0	0	0	
			for(int anInt :ints) {
				System.out.print(anInt+"\t");
	         }
			System.out.println();
		}
转换为稀疏数组保存思路:

1、通过循环遍历获取有有效值(坐标内元素值!=0)的坐标个数

2、创建新容器 数组array2来装稀疏数组,同时也要给出array2中一些初始已知坐标值

3、遍历二维数组,将非零的值,存放稀疏数组中

4、输出稀疏数组

//获取有效值个数
		int sum=0;
		 for(int i=0;i<11;i++) {
			 for(int j=0;j<11;j++) {
				 if(array1[i][j]!=0) {// if(array1[][]!=0)里面要写值
					 sum++;//通过以上两图,找规律我们发现,稀疏列表的最末行的数字正好=有效数的个数
				 }
			 }
		 }
		 System.out.println("有效值的个数:"+sum);
		 
		//创建一个稀疏数组 
		 int[][] array2=new int[sum+1][3];//int[sum+1][3]定义array2数组的大小
		 array2[0][0]=11;
		 array2[0][1]=11;
		 array2[0][2]=sum;
		 //遍历二维数组,将非零的值,存放稀疏数组中
		 int count=0;
		 for(int i=0;i<array1.length;i++) {
			 for(int j=0;j<array1[i].length;j++ ) {//array1[i].length  i行的长度
				 if(array1[i][j]!=0) {
					 count++;//首先得先在草稿纸上列出稀疏数组的样式 0列:行 1列:列;2列:值
					 array2[count][0]=i;
					 array2[count][1]=j;
					 array2[count][2]=array1[i][j];
				 }
			 }
		 }
		
		 //输出稀疏数组
		 System.out.println("==============");
		 System.out.println("稀疏数组:");
		 for(int i=0;i<array2.length;i++) {
			 System.out.println( array2[i][0]+"\t"+
			 					array2[i][1]+"\t"+
			 					array2[i][2] +"\t");
		 }
	  
还原稀疏数组思路:

1、读取稀疏数组,用新的容器array3来装读取出来的数组值,(注意新建array3数组定义大小)

2、把array2中的坐标元素转换成原数组array1的样子,并装入array3容器中。

3、遍历数组array3输出元素。

 System.out.println("==============");
		 System.out.println("还原稀疏数组:");
		 
		 //1、读取稀疏数组
		int[][] array3=new int[array2[0][0]][array2[0][1]];
		 /*int[array2[0][0]][array2[0][1]] array2是稀疏数组,
		 它第一行第一个元素是:array1组的总行数;
		 它第一行第二个元素是:array1组的总列数;
		 */
		 //给其中的元素还原它的值
		 for(int i=1;i<array2.length;i++) {//第0行不用遍历
		 array3[array2[i][0]][array2[i][1]]=array2[i][2];
		 }
		 //打印
		 System.out.println("==============");
		 System.out.println("输出原始数组:");

		 for(int[] ints:array3){  
				for(int anInt :ints) {
					System.out.print(anInt+"\t");
		         }
				System.out.println();
			}

		 for(int[] ints:array3)  {
				for(int anInt :ints) {
					System.out.print(anInt+"\t");
		         }
				System.out.println();
			}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值