Java编程开发-数据结构与算法「稀疏数组」
小职 2021-04-16 来源 :Java精髓 阅读 553 评论 0

摘要:本文主要介绍了Java编程开发-数据结构与算法「稀疏数组」,通过具体的内容向大家展现,希望对大家Java开发的学习有所帮助。

本文主要介绍了Java编程开发-数据结构与算法「稀疏数组」,通过具体的内容向大家展现,希望对大家Java开发的学习有所帮助。

Java编程开发-数据结构与算法「稀疏数组」

基本介绍

 

当一个数组中大部分元素为0,或者为同一个值的数组时,可以使用稀疏数组来保存该数组.

 

稀疏数组的处理方法是:

 

记录数组一共有几行几列,有多少个不同的值.

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

举例说明

 

原始的二维数组

 Java编程开发-数据结构与算法「稀疏数组」

 


转换后的二维数组

 

第一行记录原始数组有多少行列,多少值(8<<代表原始数组的值的个数22,15,11,17,-6,39,91,28>>)

 Java编程开发-数据结构与算法「稀疏数组」

二维数组转稀疏数组思路

 

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

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

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

稀疏数组转原始二维数组思路

 

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

再读取稀疏数组后几行的数据,并赋给原始的二维数组即可.

应用实例

 

使用稀疏数组,来保留类似前面的二维数组(棋盘\地图)等

把稀疏数组存盘,并且可重新恢复原来的二维数组数

代码案例

 

package com.structures.sparsearray;

 

public class SparseArray {

 

    public static void main(String[] args) {

        //创建一个原始的二维数组11*11

        //0:表示没有棋子,1表示黑子,2表示白子

        int[][] chessArr1 = new int[11][11];

        chessArr1[1][2] = 1;

        chessArr1[2][3] = 2;

        //输出原始二维数组

        System.out.println("原始的二维数组");

        for (int[] ints : chessArr1) {

            for (int anInt : ints) {

                System.out.printf("%d\t", anInt);

            }

            System.out.println();

        }

        //将二维数组转稀疏数组

        //1.先遍历二维数组,得到非0数据的个数.

        int sum = 0;

        for (int[] ints : chessArr1) {

            for (int anInt : ints) {

                if (anInt != 0) {

                    sum++;

                }

            }

        }

        System.out.println("sum = " + sum);

        //2.创建对应的稀疏数组

        int[][] sparseArr = new int[sum + 1][3];

        //给稀疏数组赋值

        sparseArr[0][0] = 11;

        sparseArr[0][1] = 11;

        sparseArr[0][2] = sum;

        //遍历原始数组,将非0的值存放到稀疏数组中

        int count = 0;//count用于记录第几个非0数据

        for (int i = 0; i < chessArr1.length; i++) {

            for (int j = 0; j < chessArr1[i].length; j++) {

                if (chessArr1[i][j] != 0) {

                    count++;

                    sparseArr[count][0] = i;

                    sparseArr[count][1] = j;

                    sparseArr[count][2] = chessArr1[i][j];

                }

            }

        }

        //输出稀疏数组

        System.out.println();

        System.out.println("得到的稀疏数组为~~~~");

        for (int[] ints : sparseArr) {

            for (int anInt : ints) {

                if (anInt != 0) {

                    System.out.printf("%d\t", anInt);

                }

            }

            System.out.println();

        }

 

        //将稀疏数组恢复成原始数组

        int[][] chessArr2 = new int[sparseArr[0][0]][sparseArr[0][1]];

        for (int i = 0; i < sparseArr[0][2]; i++) {

            chessArr2[sparseArr[i + 1][0]][sparseArr[i + 1][1]] = sparseArr[i + 1][2];

        }

        //恢复后的原始数组

        System.out.println("恢复后的原始数组");

        for (int[] ints : chessArr2) {

            for (int anInt : ints) {

                System.out.printf("%d\t", anInt);

            }

            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

sum = 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

*/ 


我是小职,记得找我

✅ 解锁高薪工作

✅ 免费获取基础课程·答疑解惑·职业测评

Java编程开发-数据结构与算法「稀疏数组」

本文由 @小职 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程