稀疏数组个人理解
- 打印出一个二维数组
// 定义长度为5的二位数组
int[][] arrayNum1 = new int[5][5];
// 给任意数组内数组赋值,数组以索引0为初始
arrayNum1[3][2] = 9;
arrayNum1[2][3] = 7;
/* 索引 0 1 2 3 4
第一列 第二列 第三列 第四列 第五列
0 第1行 0 0 0 0 0
1 第2行 0 0 0 0 0
2 第3行 0 0 0 7 0
3 第4行 0 0 9 0 0
4 第5行 0 0 0 0 0
*/
// 遍历该数组
for (int[] array : arrayNum1) {
for (int arrays : array) {
System.out.print(arrays + " ");
}
System.out.println();
}
输出得到:
0 0 0 0 0
0 0 0 0 0
0 0 0 7 0
0 0 9 0 0
0 0 0 0 0
- 将二位数组转为稀疏数组
// 定义一个变量记录数组内值有多少个
int valueSum = 0;
// 遍历行数
for (int i = 0;i < arrayNum1.length;i++ ){
// 遍历列数
for (int j = 0;j <arrayNum1.length;j++){
// 判断当第几行几列有值时,则记录值数的变量加1
if (arrayNum1[i][j] != 0){
valueSum ++;
}
}
}
/* 大量重复单一的值我们可以以稀疏数组进行保存
稀疏数组样式,也就是说以上数组转为稀疏数组后,总共有5行,5列,两个值
第一个值在一维数组索引为3,二维数组索引为2中
第二个值在一维数组索引为2,二维数组索引为3中
行(rows) 列(cols) 值(value)
* 记录总数组 5 5 2
* 第一个值 3 2 9
* 第二个值 2 3 7
转为稀疏数组首先应记录总行总列及值有多少个
*/
// 定义一个稀疏数组,第一个[]代表行,第二个[]代表列,行有头部行及值的行数,即值的数量+1
int[][] arrayNum2 = new int[valueSum+1][3];
// 给数组初始化赋值
arrayNum2[0][0] = 5;
arrayNum2[0][1] = 5;
arrayNum2[0][2] = valueSum;
// 遍历二位数组将有效值(非零的值)赋给稀疏数组
// 定义一个变量,代表二维数组中非零值的个数
int count = 0;
// 外部循环遍历行数(二维数组第一层数组,也就是第一个[];
for (int i = 0;i < arrayNum1.length;i++){
// 内层循环遍历列数(二维数组中数组中的数组...[][])
for (int j = 1;j < arrayNum1[i].length;j++){
// 当数组中的数组有值时,记录值个数的变量加1
if (arrayNum1[i][j] != 0){
count++;
/* 将得出的值赋给稀疏数组,值的个数代表行数,假如有两个有效值,则行数有:有效值+1
行[cuont] 列[j] 值[i][j]
* 记录总数组 5 5 2
* 第一个值 3 2 9
* 第二个值 2 3 7
*/
arrayNum2[count][0] = i; // 横坐标,count表示第几行存
arrayNum2[count][1] = j; // 纵坐标,表示第几列存
arrayNum2[count][2] = arrayNum1[i][j]; // 赋值
}
}
}
System.out.println("稀疏数组为:");
// 遍历稀疏数组并打印
for (int[] num : arrayNum2){
for (int nums : num){
System.out.print(nums+" ");
}
System.out.println();
}
输出得到:
稀疏数组为:
5 5 2
2 3 7
3 2 9
- 将稀疏数组转为二维数组
// 将稀疏数组转为二维数组,总共有5行5列
// arrayNum2[0][0],代表稀疏数组的第一个元素,为行数
// arrayNum2[0][1],代表稀疏数组的第二个元素.为列数
int[][] arrayNum3 = new int[arrayNum2[0][0]][arrayNum2[0][1]];
// 遍历稀疏数组有效值个数,将值赋给二维数组
for (int i = 1;i <= count ;i++){
arrayNum3[arrayNum2[i][0]][arrayNum2[i][1]] = arrayNum2[i][2];
}
// 打印
System.out.println("稀疏数组转为二位数组:");
for(int[] num : arrayNum3){
for (int nums : num){
System.out.print(nums+" ");
}
System.out.println();
}
472

被折叠的 条评论
为什么被折叠?



