• 数据结构与算法(Java版)_02_SparseArray稀疏数组


    稀疏数组使用场景:

    当一个二维数组中很多元素为0或为同一个值时,可以用稀疏数组保存该数组。

    稀疏数组使用方法

    1.先统计原二维数组行和列数,以及有多少个不为0的数或多少个不同的数。

    2.创建一个二维数组作为稀疏数组,第一行分别存放行数、列数、多少个不为0的数或多少个不同的数。

    3.遍历数组,将每个不为0的数或每个不同的数的行标、列标、值分别存放到稀疏数组中。

    使用Java代码实现:

    public static void main(String[] args) {
            //创建棋盘并初始化棋子位置,1代表黑子,2代表蓝子
            int[][] chessBoard = new int[11][11];
            chessBoard[1][1] = 1;
            chessBoard[2][2] = 2;
            chessBoard[4][7] = 2;
            
            //统计非零数据总数
            int notZeros = 0;
            for(int[] row : chessBoard) {
                for(int element : row) {
                    if(0!=element) notZeros++;
                }
            }
            //创建稀松数组并赋值
            int[][] sparseArr= new int[notZeros+1][3];
            sparseArr[0][0] = 11;
            sparseArr[0][1] = 11;
            sparseArr[0][2] = notZeros;
            int count = 0;
            for(int i=0;i<chessBoard.length;i++) {
                for(int j=0;j<chessBoard[0].length;j++) {
                    if(0!=chessBoard[i][j]) {
                        count++;
                        sparseArr[count][0] = i;
                        sparseArr[count][1] = j;
                        sparseArr[count][2] = chessBoard[i][j];
                    }
                }
            }
            
            //解析稀松数组为普通数组
            int newRow = sparseArr[0][0];
            int newCol = sparseArr[0][1];
            int[][] chessBoard1 = new int[newRow][newCol];
            for(int i=1;i<sparseArr.length;i++) {
                    int row1 = sparseArr[i][0];
                    int col1 = sparseArr[i][1];
                    int val = sparseArr[i][2];
                    chessBoard1[row1][col1] = val;
            }
            sop("初始棋盘为:
    ","");
            //打印棋盘
            for(int[] row : chessBoard) {
                for(int element : row) {
                    sop("%d ",element);
                }
                sop("
    ","");
            }
            sop("存储棋盘的稀松数组为:
    ","");
            //打印稀松数组
            for(int[] row : sparseArr) {
                for(int element : row) {
                    sop("%d ",element);
                }
                sop("
    ","");
            }
            sop("稀松数组转棋盘为:
    ","");
            //打印棋盘
            for(int[] row : chessBoard1) {
                for(int element : row) {
                    sop("%d ",element);
                }
                sop("
    ","");
            }
            //sop("%d",notZeros);
        }
        public static void sop(String str,Object obj1) {
            System.out.printf(str,obj1);
        }
    }

    实现效果:

  • 相关阅读:
    女孩提出分手的N种理由
    Attribute应用,简化ANF自定义控件初始化过程
    关于Web的动态页面与静态页面分开的想法.
    .Net面试题
    算法题,不用递归,构造树型
    花两个小时,做了个分页控件
    事件应用,为系统提供扩展功能
    绘制半透明的图片
    Tile Studio简介(转载)
    Thinking in Java 摘录笔记
  • 原文地址:https://www.cnblogs.com/wmskywm/p/15422071.html
Copyright © 2020-2023  润新知