稀疏数组

稀疏数组

这个真的蛮复杂的 自己敲的时候还有一两次懵了回过去看了老师的代码

原始数组

题目中的数组是一个11行11列的数组

0 0 0 0 0 0 0 0 0 0 0
0 0 1 0 0 0 0 0 0 0 0
0 0 0 2 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0

· 输出原始的数组

//输出原始的数组
        int[][] array1 = new int[11][11];
        // 有效值赋值
        array1[1][2] = 1;
        array1[2][3] = 2;
        //遍历原始数组  这里使用强化for循环
        System.out.println("原始的数组  11行11列");
        for (int[] ints : array1) {
            for (int anInt : ints) {
                System.out.print(anInt+"\t");
            }
            System.out.println();
        }

转化为稀疏数组保存

//转化为稀疏数组保存
//获取有效值的个数
int sum = 0;
for (int i = 0; i < 11; i++) {
    for (int j = 0; j < 11; j++) {
        if(array1[i][j] != 0){
            sum++;
        }
    }
}
System.out.println("有效值个数:"+sum);
//创建一个稀疏数组的数组
int[][] array2 = new int[sum+1][3];
array2[0][0] =11;
array2[0][1] =11;
array2[0][2] =sum;
//读取有效值的横纵坐标 存入稀疏数组
int count = 0;
for (int i = 0; i < array1.length; i++) {
    for (int j = 0; j < array1[i].length; j++) {
        if(array1[i][j] != 0){
            count++;
            array2[count][0] = i;
            array2[count][1] = j;
            array2[count][2] = array1[i][j];
        }
    }
}
//这时候稀疏数组的元素就都有了  接着输出稀疏数组
System.out.println("稀疏数组");
for (int i = 0; i < sum + 1; i++) {
    for (int j = 0; j < 3; j++) {
        System.out.print(array2[i][j]+"\t");
    }
    System.out.println();
}

最后将稀疏数组还原为原来的数组

//接着尝试将稀疏数组还原成原来的数组
int[][] array3 = new int[array2[0][0]][array2[0][1]];  //创建一个新的数组 行数是稀疏数组00 列数是01
for (int i = 1; i < array2.length; i++) {
    array3[array2[i][0]][array2[i][1]] = array2[i][2];   //将有效值存入要还原的数组
}
/*   这两行是我自己一开始写的 看了老师的后换成了上面的循环
array3[array2[1][0]][array2[1][1]] = array2[1][2];  //将有效值存入要还原的数组
array3[array2[2][0]][array2[2][1]] = array2[2][2];  */
//最后遍历根据稀疏数组还原的原数组
System.out.println("还原的数组");
for (int i = 0; i < array3.length; i++) {
    for (int j = 0; j < array3[i].length; j++) {
        System.out.print(array3[i][j]+"\t");
    }
    System.out.println();
}

下一个视频就要到面向对象了

加油加油

学习java第三天

posted @ 2022-05-28 19:27  划水安逸  阅读(21)  评论(0)    收藏  举报