数据结构之稀疏数组

[亡魂溺海] 提交于 2020-01-17 08:02:06

稀疏数组介绍

当一个数组中大部分元素为0,或者为同一个值的数组时,可以使用稀疏数组来保存该数组,最大的优势是节点计算机的空间.

稀疏数组的处理方法:
(1)记录数组一共有几行几列,有多少个不同的值.
(2)把具有不同值的元素的行及值记录在一个小规模的数组中,从为减少程序的规模.

稀疏数组结构

以下用图片来说明,记录的原始数组为11行,11列,有效值为2个
在这里插入图片描述

二维数组转稀疏数组的思路

(1)遍历原始的二维数组,得到有效数据的个数sum
(2)根据sum就可以创建稀疏数组
(3)将二维数组的有效数据存入到稀疏数组.

稀疏数组转二维数组

(1)先读取稀疏数组的第一行,根据第一行的数据,创建二维数组.
(2)读取稀疏数组的后几行,依次赋值给二维数组.

代码demo

package com.dataStructure;

public class sparseArr {
    public static void main(String[] args) {
        //创建原始二维数组
        int[][] chessArr = new int[4][8];
        chessArr[1][2] = 1;
        chessArr[2][3] = 2;
        //统计原始数组非0的个数
        int sum = 0;
        for (int i = 0; i < chessArr.length; i++) {  //获取二维数组的行数
            for (int j = 0; j < chessArr[0].length; j++) {  //互获取二维数组的列数
                if(chessArr[i][j] != 0){
                    sum ++;
                }
            }
        }
        //将二维数组转换为稀疏数组
        int[][] sparseArr = new int[sum + 1][3];
        sparseArr[0][0] = chessArr.length;
        sparseArr[0][1] = chessArr[0].length;
        sparseArr[0][2] = sum;
        int count = 0;
        for (int i = 0; i < chessArr.length; i++) {
            for (int j = 0; j < chessArr[0].length; j++) {
                if(chessArr[i][j] != 0){
                    count ++;
                    sparseArr[count][0] = i;
                    sparseArr[count][1] = j;
                    sparseArr[count][2] = chessArr[i][j];
                }
            }
        }
        //将稀疏数组转换为二维数组
        int row = sparseArr[0][0];
        int col = sparseArr[0][1];
        int[][] arr = new int[row][col];
        for (int i = 1; i < sparseArr.length; i++) {
            arr[sparseArr[i][0]][sparseArr[i][1]] = sparseArr[i][2];
        }
    }
}
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!