Java算法之稀疏数组

2024-06-14 12:41

稀疏数组

代码实现

/**
 * 稀疏表、稀疏数组
 */
public class SparseArrayMain {

    public static void main(String[] args) {
        int[][] chessArr = new int[11][11];

        chessArr[1][2]=1;
        chessArr[2][3]=2;
        //输出原始二维数组
        System.out.println("初始数组:");
        for(int i=0;i<chessArr.length;i++){
            for(int j=0;j<chessArr[i].length;j++){
                System.out.print(chessArr[i][j]+"\t");
            }
            System.out.println("");
        }
        System.out.println("====================================");

//        for(int [] row:chessArr){
//            for(int col:row){
//                System.out.printf("%d\t",col);
//            }
//            System.out.println("");
//        }
         //首先遍历 获取非零的元素的位置和个数
        int sum = 0 ;
//        for(int [] row:chessArr){
//            for(int col:row){
//               if(col!=0){
//                    ++sum;
//               }
//            }
//        }
        for(int i=0;i<chessArr.length;i++){
            for(int j=0;j<chessArr[i].length;j++){
                if(chessArr[i][j]!=0){
                    ++sum;
               }
            }
        }

        //创建稀疏数组
        int[][] spareArr = new int[sum+1][3];
        spareArr[0][0]=11;
        spareArr[0][1]=11;
        spareArr[0][2]=sum;
        int row = 1;//记录第几个非零的数据值
        for(int i=0;i<chessArr.length;i++){
            for(int j=0;j<chessArr[i].length;j++){
                if(chessArr[i][j]!=0){
                    spareArr[row][0]=i;
                    spareArr[row][1]=j;
                    spareArr[row][2]=chessArr[i][j];
                    row++;
                }
            }
        }
        System.out.println("稀疏数组:");
        for(int i=0;i<spareArr.length;i++){
            for(int j=0;j<spareArr[i].length;j++){
                System.out.printf("%d\t",spareArr[i][j]);
            }
            System.out.println("");
        }
        //稀疏数组还原数组
        int [][] newArr = new int[spareArr[0][0]][spareArr[0][1]];
        System.out.println("====================================");
        System.out.println("还原数组:");
        for(int i=1;i<spareArr.length;i++){
            newArr[spareArr[i][0]][spareArr[i][1]]=spareArr[i][2];
        }

        for(int i=0;i<newArr.length;i++){
            for(int j=0;j<newArr[i].length;j++){
                    System.out.printf("%d\t",newArr[i][j]);
            }
            System.out.println("");
        }
        System.out.println("====================================");
    }
}


相关新闻
热点
视频
投票
查看结果
Tags

站点地图 在线访客: 今日访问量: 昨日访问量: 总访问量:

© 2025 个人网站 版权所有

备案号:苏ICP备2024108837号

苏公网安备32011302322151号