稀疏数组

为什么要使用系数数组

  当有一个数组大部分元素都为0,这样存储这个数组就会消耗很多无用的资源,所以需要用稀疏数组进行储存

处理方式

  1. 记录数组一共有几行几列,有多少不同的值
  2. 把具体不同的值的元素行列及值记录在小规模的数组中,从而缩小规模
    在这里插入图片描述 在这里插入图片描述

第一行存储这个数组有几行几列,有几个不同的值(例如图中多少个非0的值)
下面用于用存储第几行第几列存储的值为多少

转换思路

二维数组—>稀疏数组
  1. 遍历原始二维数组,记录有效值个数为sum
  2. 根据sum数创建 稀疏数组sparseArr int[sum+1][3]
  3. 将二维数组中的有效数据输入进稀疏数组里
稀疏数组—>二维数组
  1. 先读取稀疏数组第一列的数据,建立二维数组
  2. 读取稀疏数组后面的几行数据,并赋值给二维数组
public class SparseArr {
    public static void main(String[] args) {
        //先定义原始二维数组
        int cherrArr1[][] = new int[11][11];
        //初始化棋盘,将1,3;2,4赋值为1,其他为0
        for(int row[] : cherrArr1)
        {
            for(int line : row)
            {
                line = 0;
            }
        }
        cherrArr1[0][2] = 1;
        cherrArr1[1][3] = 1;
        //将棋盘打印出来
        for(int row[] : cherrArr1)
        {
            for(int line : row)
            {
                System.out.print(line + "\t");
            }
            System.out.println();
        }
        //变为稀疏数组,第一行先获取行列数及有多少个不同的数据
        int rowSum = 0;
        int lineSum = 0;
        int dataSum = 0;
        for(int row[] : cherrArr1)
        {
            rowSum++;
            for(int line : row)
            {
                lineSum++;
                if(line != 0)
                {
                    dataSum++;
                }
            }
        }
        lineSum = lineSum/rowSum;
        //建立稀疏数组
        int SparseArr[][] = new int[dataSum+1][3];
        //定义在稀疏数组里的行数
        int Srow = 0;
        SparseArr[0][0] = rowSum;
        SparseArr[0][1] = lineSum;
        SparseArr[0][2] = dataSum;
        int rowSum1 = 0;
        for(int row[] : cherrArr1)
        {
            int lineSum1 = 0;
            rowSum1++;
            for(int line : row)
            {
                lineSum1++;
                if(line != 0)
                {
                    ++Srow;
                    SparseArr[Srow][0] = rowSum1;
                    SparseArr[Srow][1] = lineSum1;
                    SparseArr[Srow][2] = line;
                }
            }
        }
        System.out.println();System.out.println();
        for(int row[] : SparseArr)
        {
            for(int line : row)
            {
                System.out.print(line+"\t");
            }
            System.out.println();
        }
        //系稀疏数组还原
        int[][] cherrArr2 = new int[SparseArr[0][0]][SparseArr[0][1]];
        int cherrRow = 0;
        for(int row[] : cherrArr2)
        {
            cherrRow++;
            int cherrLine = 0;
            for(int line : row)
            {
                cherrLine++;
                line = 0;
            }
        }
        for(int i=1; i<dataSum+1; i++)
        {
            cherrArr2[SparseArr[i][0]-1][SparseArr[i][1]-1] = 1;
        }
        for(int row[] : cherrArr2)
        {
            for(int line : row)
            {
                System.out.print(line + "\t");
            }
            System.out.println();
        }
    }
}
运行结果
0	0	1	0	0	0	0	0	0	0	0	
0	0	0	1	0	0	0	0	0	0	0	
0	0	0	0	0	0	0	0	0	0	0	
0	0	0	0	0	0	0	0	0	0	0	
0	0	0	0	0	0	0	0	0	0	0	
0	0	0	0	0	0	0	0	0	0	0	
0	0	0	0	0	0	0	0	0	0	0	
0	0	0	0	0	0	0	0	0	0	0	
0	0	0	0	0	0	0	0	0	0	0	
0	0	0	0	0	0	0	0	0	0	0	
0	0	0	0	0	0	0	0	0	0	0	

11	11	2	
1	3	1	
2	4	1	

0	0	1	0	0	0	0	0	0	0	0	
0	0	0	1	0	0	0	0	0	0	0	
0	0	0	0	0	0	0	0	0	0	0	
0	0	0	0	0	0	0	0	0	0	0	
0	0	0	0	0	0	0	0	0	0	0	
0	0	0	0	0	0	0	0	0	0	0	
0	0	0	0	0	0	0	0	0	0	0	
0	0	0	0	0	0	0	0	0	0	0	
0	0	0	0	0	0	0	0	0	0	0	
0	0	0	0	0	0	0	0	0	0	0	
0	0	0	0	0	0	0	0	0	0	0

对自己说的话:
今天是2020/1/16,今天是算法的第一天,在未来的一个假期中要把算法搞定,同时要努力备战考研,加油,你一定行的!!!我看好你尚焕然!这次就是你翻身的时候了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值