JAVA-攻破-数据结构与算法-(稀疏数组与二维数组转换)

1 篇文章 0 订阅
1 篇文章 0 订阅
package com.util;

public class SparseUtil {

    /**
     //二维数组转稀疏数组
     * 1.遍历二维数组,得出有效的个数sum
     * 2.根据sum创建稀疏数组 Array[sum+1][3]     稀疏数组n行3列
     * 【稀疏数组第一行 第一列为原始数组的总行 第二列为原数组总列第三列为有效个数】
     * 3.将有效的数组数据转入稀疏数组
     */
    public static  int [][]ArrayToXishu(int [] [] array){
        int sum=0;//有效个数
        int row=array.length;  //总行数
        int column=array[0].length;//总列数
        for(int i=0;i<array.length;i++){
            for(int j=0;j<array[i].length;j++){
                int index=array[i][j];
                if(index!=0){
                    sum++;
                }
             }
         }
        int [][] newArray=new int[sum+1][3];//稀疏数组
        newArray[0][0]=row;
        newArray[0][1]=column;
        newArray[0][2]=sum;
        int newrow=1;
        for(int i=0;i<array.length;i++){
            for(int j=0;j<array[i].length;j++){
                int index=array[i][j];
                if(index!=0){
                    newArray[newrow][0]=i;
                    newArray[newrow][1]=j;
                    newArray[newrow][2]=index;
                    newrow++;
                }
            }
        }
        return newArray;
    }

    /**
     //稀疏数组转二维数组
     * 1.根据第一行的数据创建原始数组 array[n][3] => new array[n][n]
     * 2.在读取后面的数据并复给原始的二维数组
     */
    public static  int [][]XishuToArray(int [] [] array){
        int row=array[0][0];//原始数据的行
        int column=array[0][1];//原始数据的列
        int sum=array[0][2];//原始数据有效数量
        int newarray[][]=new int[row][column];

        for(int i=1;i<array.length;i++){
            int a=array[i][0];
            int b=array[i][1];
            int c=array[i][2];
            newarray[a][b]=c;
        }
        return newarray;
    }


    public static void main(String[] args) {
        //定义二维数组
        int [] [] array=new int[11][11];
        array[1][2]=1;
        array[2][2]=1;
        array[2][3]=2;
        array[3][2]=2;
        array[1][4]=1;
        array[1][3]=2;
        array[3][3]=1;

        System.out.println("=========================原始二维===================");
        for(int i=0;i<array.length;i++){
            for(int j=0;j<array[i].length;j++){
                int index=array[i][j];
                System.out.print("\t"+index);
            }
            System.out.println("\n");
        }

        System.out.println("=========================二维转稀疏===================");
        int [] [] newarray= SparseUtil.ArrayToXishu(array);
        for(int i=0;i<newarray.length;i++){
            for(int j=0;j<newarray[i].length;j++){
                int index=newarray[i][j];
                System.out.print("\t"+index);
            }
            System.out.println("\n");
        }
        System.out.println("=========================稀疏转二维===================");
        int [] [] oldArray= SparseUtil.XishuToArray(newarray);
        for(int i=0;i<oldArray.length;i++){
            for(int j=0;j<oldArray[i].length;j++){
                int index=oldArray[i][j];
                System.out.print("\t"+index);
            }
            System.out.println("\n");
        }


    }
}
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值