zoukankan      html  css  js  c++  java
  • 数据结构之二维数组与稀疏数组的转换

    1.二维数组

    二维数据其实就是高数中的矩阵,在此不做过多的解释

    2.稀疏数组

    当一个二维数组中大多值为0,或者相同时,我们可以考虑用到稀疏数组,来减少内存

    稀疏数组的处理方法:

    1)一个有3列的二维数组,记录原数组有几行几列,多少个不同的值

    2)不同值的元素的所在行以及列记录在稀疏数组中,从而缩小规模

    3.例子如下:

    4.下面是稀疏数组以及二维数组之间的转换

    package com.ebiz.array;
    
    /**
     * @author YHj
     * @create 2019-07-13 16:46
     * <p>
     * 稀疏数组
     */
    public class SparseArray {
    
        public static void main(String[] args) {
            //创建原始二维数组  11*11    1代表黑子  2代表白子
            int[][] chessArray1 = new int[11][11];
    
            //第一行第二列有一个黑子
            chessArray1[1][2] = 1;
            //第二行第三列有一个白子
            chessArray1[2][3] = 2;
    
           /* System.out.println("原始二维数组");
            for (int[] row : chessArray1) {
                for (int i : row) {
                    System.out.printf("%d	",i);
                    //System.out.print(i+"	");
                }
                System.out.println();
            }*/
    
            //将二维数组转成稀疏数组
            //1.得到原始数组中非0数值的个数
            int sum = 0;
            for (int i = 0; i < 11; i++) {
                for (int j = 0; j < 11; j++) {
                    if (chessArray1[i][j] != 0) {
                        sum++;
                        System.out.println();
                    }
                }
            }
            // System.out.println("sum=" + sum);
            //2.创建稀疏数组
            int[][] sparseArray = new int[sum+1][3];
            //3.稀疏数组赋值
            //3.1 第0行
            sparseArray[0][0]=11;
            sparseArray[0][1]=11;
            sparseArray[0][2]=sum;
    
            //3.2 遍历原始数组,将非空值付给稀疏数组
            int count=0;  //定义一个计数器,改变行数
            for (int i = 0; i < 11; i++) {
                for (int j = 0; j < 11; j++) {
                    if (chessArray1[i][j] != 0) {
                        count++;
                        sparseArray[count][0]=i;
                        sparseArray[count][1]=j;
                        sparseArray[count][2]=chessArray1[i][j];
    
                    }
                }
            }
            //输出稀疏数组
            System.out.println("字数数组为:");
            for (int[] row : sparseArray) {
                for (int i : row) {
                    System.out.printf("%d	",i);
                }
                System.out.println();
            }
    
            System.out.println("------------------------------------------------------------");
            System.out.println("稀疏数组复原");
    
            //根据稀疏数组创建对应数组
            int [][] chary=new int[sparseArray[0][0]][sparseArray[0][1]];
    
            //遍历稀疏数组,付给chary
            for (int i = 1; i < sparseArray.length; i++) {
                chary[sparseArray[i][0]][sparseArray[i][1]]=sparseArray[i][2];
            }
    
            //输出array
            for (int[] row : chary) {
                for (int i : row) {
                    System.out.printf("%d	",i);
                    //System.out.print(i+"	");
                }
                System.out.println();
            }
    
    
        }
    }
  • 相关阅读:
    MQ消息堆积处理
    mysql覆盖索引与回表
    MYSQL-间隙锁详解
    MySQL InnoDB(Spring)并发事务导致的死锁及解决方案
    new String()创建了几个对象
    公平锁和非公平锁
    一个java对象最小占用内存空间
    千万级甚至亿级数据量排序
    @media (prefers-reduced-motion)
    babel 编译后导致_typeof无限递归调用 Maximum call stack size exceeded
  • 原文地址:https://www.cnblogs.com/jiushixihuandaqingtian/p/11203898.html
Copyright © 2011-2022 走看看