java 稀疏数组

/**
 * 稀疏数组
 *
 * @author Mulun
 */
public class SparseArray2 {

    /**
     * 原始数组
     * <p>
     * 规则:
     * <p>
     * 0:无数据
     * <p>
     * 1:黑棋
     * <p>
     * 2:白棋
     */
    static int[][] chessArr = new int[19][19];

    /**
     * 模拟原始数组数据
     */
    static {
        chessArr[3][3] = 1;
        chessArr[5][5] = 2;
    }

    @Test
    public void main() {
        // 原始数组
        System.out.println("============原始二维数组");
        Arrays.stream(chessArr).forEach(r -> {
            Arrays.stream(r).forEach(p -> System.out.print("\t" + p));
            System.out.println();
        });

        // 转换成稀疏数组
        // 1.获取原始二维数组的有效数据个数
        // 记录原始二维数组的有效数据个数
        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++;
                }
            }
        }

        // 2.创建稀疏数组
        int[][] spArray = new int[sum + 1][3];

        // 3.给稀疏数组赋值
        spArray[0][0] = chessArr.length;
        spArray[0][1] = chessArr[0].length;
        spArray[0][2] = sum;

        // 用来记录是第几个非0数据
        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++;
                    // 第几行
                    spArray[count][0] = i;
                    // 第几列
                    spArray[count][1] = j;
                    // 值是什么
                    spArray[count][2] = chessArr[i][j];
                }
            }
        }

        System.out.println("============稀疏数组");
        Arrays.stream(spArray).forEach(r -> {
            Arrays.stream(r).forEach(p -> System.out.print("\t" + p));
            System.out.println();
        });

        // 转换回二维数组

        // 创建二维数组
        int[][] chessArr2 = new int[spArray[0][0]][spArray[0][1]];

        // 给二维数组赋值
        for (int i = 1; i < spArray.length; i++) {
            chessArr2[spArray[i][0]][spArray[i][1]] = spArray[i][2];
        }

        System.out.println("============恢复后的二维数组");
        Arrays.stream(chessArr2).forEach(r -> {
            Arrays.stream(r).forEach(p -> System.out.print("\t" + p));
            System.out.println();
        });

        // 以时间,换空间,稀疏数组
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值