1.稀疏数组
- 当一个数组中大部分元素为0,或者为同一个值的时候,可以用稀疏数组来保存该数组。
- 稀疏数组的处理方法:
1.记录数组一共有几行几列,有多少个不同的值
2.把具有不同元素的行列及值记录在一个小规模数组中,从而缩小程序规模。
2,代码实现
/**
* 稀疏数组
*
* @author wangjie
* @version V1.0
* @date 2019/12/18
*/
public class SparseArray {
public static void main(String[] args) {
int[][] chessArr1 = new int[11][11];
chessArr1[1][2] = 1;
chessArr1[5][5] = 2;
print(chessArr1);
int[][] ints = arrayToSparseArray(chessArr1);
print(ints);
int[][] ints1 = sparseArrayToArray(ints);
print(ints1);
}
/**
* 打印日志
* @param array
*/
private static void print(int[][] array){
for (int[] arr : array){
for (int ar : arr){
System.out.printf("%d\t",ar);
}
System.out.println();
}
System.out.println("----------------------------------------");
}
/**
* 将二维数组转为稀疏数组
* @param array
* @return
*/
private static int[][] arrayToSparseArray(int[][] array){
//1.先得到非0个数
int sum = 0;
for(int i = 0; i < array.length ; i++){
for (int j = 0; j < array.length ; j++){
if(0 != array[i][j]){
sum++;
}
}
}
//2.创建稀疏数组
int sparseArray[][] = new int[sum+1][3];
sparseArray[0][0] = array.length;
sparseArray[0][1] = array.length;
sparseArray[0][2] = sum;
//3.给稀疏数组赋值
int count = 0;
for(int i = 0; i < array.length ; i++){
for (int j = 0; j < array.length ; j++){
if(0 != array[i][j]){
count++;
sparseArray[count][0] = i;
sparseArray[count][1] = j;
sparseArray[count][2] = array[i][j];
}
}
}
return sparseArray;
}
/**
* 稀疏数组转二维数组
* @param sparseArray
* @return
*/
private static int[][] sparseArrayToArray(int[][] sparseArray){
//1.先读取稀疏数组第一行,创建二维数组
int array[][] = new int[sparseArray[0][0]][sparseArray[0][1]];
//2.给二维数组赋值
for(int i = 1;i < sparseArray.length;i++){
array[sparseArray[i][0]][sparseArray[i][1]] = sparseArray[i][2];
}
return array;
}
}
运行结果:
【完】
注:文章内所有测试用例源码:https://gitee.com/wjie2018/java-data-structure-and-algorithm.git