稀疏数组

稀疏数组

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

  • 稀疏数组的处理方式是:

    • 记录数组一共有几行几列,有多少个不同值
    • 把具有不同值的元素和行列及值记录在一个小规模数组中,从而缩小数组的规模

在这里插入图片描述

package com.ycy;

import java.lang.reflect.Array;
import java.util.Arrays;

public class demo {
        public static void main(String[] args) {
                int[][]a = new int[11][11] ;
                a[1][2]=1;
                a[2][3]=2;
                //输出原始数组(用foreach循环)
                for (int b[]:a) {
                        for (int c:b) {
                                System.out.print(c+"\t");
                        }
                        System.out.println();
                }
                //转换为稀疏数组
                // 1.获取有效值
                int sum = 0;
                for (int i = 0; i <a.length ; i++) {
                        for (int j = 0; j <a[i].length ; j++) {
                                if (a[i][j]!=0){
                                        sum++;
                                }
                        }
                }
                // 2.创建一个稀疏数组
                int c[] [] = new int[sum+1][3];
                c[0][0] = 11;
                c[0][1] = 11;
                c[0][2] = sum;
                // 3.遍历原来的二维数组,将其中非0的值放到稀疏数组中
                int count = 1;
                for (int i = 0; i <a.length; i++) {
                        for (int j = 0; j <a[i].length ; j++) {
                                if (a[i][j]!=0){
                                        c[count][0]=i;
                                        c[count][1]=j;
                                        c[count][2]=a[i][j];
                                        count++;
                                }
                        }
                }
                // 输出稀疏数组
                for (int i = 0; i < c.length ; i++) {
                        System.out.println(c[i][0]+"\t"+c[i][1]+"\t"+c[i][2]+"\t");
                }
                // 还原原始数组
                // 1.读取系数数组
                int [][] d = new int[c[0][0]][c[0][1]];
                // 2.给其中的元素还原值
                for (int i = 0; i <c.length-1; i++) {
                        d[c[i+1][0]][c[i+1][1]] = c[i+1][2];
                }
                // 打印还原后的原始数组
                for (int i = 0; i <d.length; i++) {
                        for (int j = 0; j <d[i].length ; j++) {
                                System.out.print(d[i][j]+"\t");
                        }
                        System.out.println();
                }
        }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值