稀疏数组转换Java

Posted yangbocsu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了稀疏数组转换Java相关的知识,希望对你有一定的参考价值。

稀疏数组


package com._1_Java数据结构_尚硅谷._1稀疏数组;

/**
 * @author: 97942
 * @date: 2021/9/20 10:24
 * @description:稀疏数组实现
 */
public class 稀疏数组实现
{
    public static void main(String[] args) {
        // 0 创建稀疏矩阵
        int arr[][] = new int[6][7];
        arr[0][3] = 22;
        arr[0][6] = 15;
        arr[1][1] = 11;
        arr[1][5] = 17;
        arr[2][3] = -6;
        arr[3][5] = 39;
        arr[4][0] = 91;
        arr[5][2] = 28;
        System.out.println("\\n0 原始矩阵:");
        for (int i = 0; i < arr.length; i++) {
            for (int j = 0; j < arr[i].length; j++) {
                System.out.printf("\\t%d\\t",arr[i][j]);
            }
            System.out.println();   //  每一行后面换行
        }

        // 1 生成稀疏矩阵
        int sum= 0;     //先算出非零值个数
        for (int i = 0; i < arr.length; i++) {
            for (int j = 0; j < arr[i].length; j++) {
                if (arr[i][j] !=0)
                    sum++;
            }
        }
        int[][] sparsearr = new int[sum+1][3];  //稀疏数组的行数是   原始数组非零个数 + 1
        sparsearr[0][0] = arr.length;                 //原始数组的行数
        sparsearr[0][1] = arr[0].length;              //原始数组的列数
        sparsearr[0][2] = sum;                        //原始数组非零个数

        int count= 0;
        for (int i = 0; i < arr.length; i++) {
            for (int j = 0; j < arr[0].length; j++) {
                if (arr[i][j] !=0)
                {
                    count++;
                    sparsearr[count][0] = i;
                    sparsearr[count][1] = j;
                    sparsearr[count][2] = arr[i][j];
                }

            }
        }

        System.out.println("\\n1 稀疏数组:");
        for (int i = 0; i < sparsearr.length; i++) {
            for (int j = 0; j < sparsearr[i].length; j++) {
                System.out.printf("\\t%d\\t",sparsearr[i][j]);
            }
            System.out.println();   //  每一行后面换行
        }

        //2 从稀疏数组恢复原始数组
        int[][] originArr = new int[sparsearr[0][0]][sparsearr[0][1]];
        for (int i = 1; i < sparsearr.length; i++) {
            for (int j = 0; j < sparsearr[0].length; j++) {
                originArr[sparsearr[i][0]][sparsearr[i][1]] = sparsearr[i][2];
            }
        }

        System.out.println("\\n2 恢复原始数组:");
        for (int i = 0; i < originArr.length; i++) {
            for (int j = 0; j < originArr[i].length; j++) {
                System.out.printf("\\t%d\\t",originArr[i][j]);
            }
            System.out.println();   //  每一行后面换行
        }

    }
}


以上是关于稀疏数组转换Java的主要内容,如果未能解决你的问题,请参考以下文章

稀疏数组转换Java

java09+稀疏数组 来回转换

JAVA描述算法和结构(01):稀疏数组和二维数组转换

数据结构与算法(Java版) | 稀疏数组转换的思路分析

数据结构与算法(Java版) | 稀疏数组转换的思路分析

数据结构稀疏数组 --- 应用场景,转换的思路分析,代码实现