稀疏数组
1、记录数组一共有几行几列,有多少不同的值;
2、把具有不同值的元素的行、列及值记录在一个小规模二维数组中(稀疏数组),从而缩小存储数据的规模。
- 将这个棋盘用稀疏数组记录
package S;
//普通矩阵类型,二维数组实现
public class S2 {
public static void main(String[] args) {
int[][] array1 = new int[11][11];
array1[1][3] = 1;
array1[2][4] = 2;
//用for语句增强遍历二维数组
for (int[] ints :array1){
for (int aInt : ints ){
System.out.print(aInt + "\t");
}
System.out.println();
}
System.out.println();
System.out.println( "分割==========================");
System.out.println();
//稀疏数组,可以压缩相同的数
//节省内存,并在相同数据上不用在遍历数据,节省代码运行时间
/*
1.先获取有效值sum
2.数组格式sparse[sum+1][3];行数为sum+1,列数始终为3
*/
//确认sum值
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 < array2.length;i++){
System.out.println(array2[i][0] + "\t" +
array2[i][1] + "\t" +
array2[i][2] + "\t");
}
}
}