博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java实现稀疏数组
阅读量:3947 次
发布时间:2019-05-24

本文共 1807 字,大约阅读时间需要 6 分钟。

什么是稀疏数组?

用来简化某个二维数组中大量无效数据的一种二维数组

举例:

0 0 0 0 0 0 0 0 0 00 0 1 0 0 0 0 0 0 00 0 0 2 0 0 0 0 0 00 0 0 0 0 0 0 0 0 00 0 0 0 3 0 0 0 0 00 0 0 0 0 0 0 0 0 00 0 0 0 0 0 0 0 0 00 0 0 0 0 0 0 0 0 00 0 0 0 0 0 0 0 0 00 0 0 0 0 0 0 0 0 0

这种含有大量0或者同一个数值的情况下就可以考虑使用稀疏数组

一般是如下处理:

(1)记录原始二维数组一共几行几列,有多少个不同的值;

(2)把具有不同值的元素的行及列值记录在一个小规模的数组中,从而缩小程序的规模

例如:

0: 10 10  31:  1  2  12:  2  3  23:  4  4  3

其中,第一行记录的信息是原始二维数组的行、列信息以及有效数据的个数,后面依次存储的是有效数据的行、列信息以及所代表的数值。

具体实现方法:

(1)遍历原始的二维数组,得到有效数据的个数sum

(2)根据sum就可以创建稀疏数组sparseArr int[sum+1][3]

(3)将二维数据的有效数据存入到稀疏数组

代码实现:

package com.zcx;/** * @author Kesrn * 稀疏数组:用于二维数组中存在多个相同或者为0的数据  */public class ArrayTest {	public static void main(String[] args) {		//原始二维数组-》稀疏数组		//原始数据		int [][] arr=new int[11][11];		arr[1][2]=1;		arr[2][3]=2;		arr[3][4]=2;		for (int[] is : arr) {			for(int num:is) {				System.out.printf("%d\t",num);			}			System.out.println();		}		//获取有限数据sum		int sum=0;		for (int i =0;i<11;i++) {			for(int j =0;j<11;j++) {				if(arr[i][j] != 0) {					sum++;				}			 			}		}				System.out.println(sum);				//创建对应的稀疏数组		int sparseArray[][]=new int[sum+1][3];				sparseArray[0][0] =11;		sparseArray[0][1] =11;		sparseArray[0][2] =sum;				int count = 0;//记录有效的数据个数		for (int i =0;i<11;i++) {			for(int j =0;j<11;j++) {				if(arr[i][j] != 0) {					count++;					sparseArray[count][0] = i;					sparseArray[count][1] = j;					sparseArray[count][2] = arr[i][j];									}			 			}		}		for(int i = 0;i< sparseArray.length;i++) {			System.out.printf("%d\t%d\t%d\t\n",sparseArray[i][0],sparseArray[i][1],sparseArray[i][2]);		}		System.out.println();

当然我们存储为稀疏数组之后,也得能从稀疏数组转回原始二维数组:

具体实现:

(1)先读取稀疏数组的第一行,根据第一行的数据,创建原始的二维数组

(2)在读取稀疏数组除了第一行后几行的数据,并赋给原始二维数组

//原始二维数组《-稀疏数组				int i = sparseArray[0][0];		int j = sparseArray[0][1];		int newArr[][] = new int[i][j];		for(int k = 1;k

 

转载地址:http://hxewi.baihongyu.com/

你可能感兴趣的文章
点击出现对应界面(第二个界面可以选择显示内容)------Sestid
查看>>
Js实现炫酷仿抖罗盘时钟------Sestid
查看>>
vivo官网鼠标触碰图片拉长------Sestid
查看>>
canvas画布实现的集中效果
查看>>
Js实现点击置顶效果(带动画)
查看>>
Js实现input全选、全不选、反选功能------Sestid
查看>>
纯css实现好看的背景------Sestid
查看>>
为什么我的CSDN上都是开关灯??????Js实现开灯关灯特效
查看>>
Js实现生成自定义输入行列宽高表格------Sestid
查看>>
Js实现购物车加减,价格计算等功能
查看>>
Js自定义快捷键并实现上下左右移动
查看>>
面试看这里!!!2020年前端面试知识点(持续更新)
查看>>
纯CSS实现轮播图------Sestid
查看>>
CSS实现自动播放相册------Sestid
查看>>
JavaScript四种基础的排序方法
查看>>
这里有美女!!!!抖音上很火的3D立体动态相册的实现(纯CSS)
查看>>
一张图让您看懂git,看不懂我也没办法了。。。。。。。。
查看>>
Es6字符串和数组的新方法---自己在控制台都可以看到
查看>>
喜欢NBA的朋友快来这里看第一阶段的全明星投票结果!!!(更新到第二阶段、第三阶段)
查看>>
TCP的三次握手与四次挥手看完这篇文章您要是不理解,那我也没什么办法了!!!
查看>>