视频学习地址
前言
稀疏数组是一种数据结构,当一个数组中大部分元素为同一个值,可以使用稀疏数组来保存该数组。
处理方式
- 记录数组一共有几行几列,有多少个不同值
- 把具有不同值的元素和行列及值记录在一个小规模的数组中,从而缩小程序的规模
import java.util.Arrays;
public class Demo {
public static void main(String[] args) {
//创建一个二维数组
int[][] arrayOne = new int[5][10];
arrayOne[0][0] = 2;
arrayOne[1][0] = 1;
//arrayOne[2][9] = 2;
//arrayOne[4][3] = 2;
//原始数组输出
System.out.println("原始数组");
for (int[] ints : arrayOne) { //循环数组
for (int anInt : ints) { //循环子数组
System.out.print(anInt+"\t"); //输出子数组
}
System.out.println(); //输出换行
}
//判断有效值的数量
int sum = 0;
for (int i = 0; i < arrayOne.length; i++) {
for (int j = 0; j < arrayOne[i].length; j++) {
if (arrayOne[i][j]!=0){
sum++;
}
}
}
//创建稀疏数组
int[][] arrayTwo = new int[sum+1][3]; //第一行是固定的所以sum要+1
arrayTwo[0][0] = arrayOne.length; //几行
arrayTwo[0][1] = 10; //几列
arrayTwo[0][2] = sum; //有效值的数
//遍历二维数组,将非零的值存放到稀疏数组中
int count = 0; //临时数据
for (int i = 0; i < arrayOne.length; i++) { //遍历行
for (int j = 0; j < arrayOne[i].length; j++) { //遍历列
if (arrayOne[i][j]!=0){
count++;
arrayTwo[count][0] = i;
arrayTwo[count][1] = j;
arrayTwo[count][2] = arrayOne[i][j];
}
}
}
//输出稀疏数组
System.out.println("稀疏数组");
for (int i = 0; i < arrayTwo.length; i++) {
System.out.print(arrayTwo[i][0]+"\t");
System.out.print(arrayTwo[i][1]+"\t");
System.out.print(arrayTwo[i][2]+"\t");
System.out.println();
}
//还原数组
System.out.println("还原数组");
//读取稀疏数组
int[][] arrayThree = new int[arrayTwo[0][0]][arrayTwo[0][1]];
//还原数组中的值
for (int i = 1; i < arrayTwo.length; i++) { //这里i=1是要略过第一行,因为第一行是自己记录的行列有效值,如果i=0则会下标越界
arrayThree[arrayTwo[i][0]][arrayTwo[i][1]] = arrayTwo[i][2];
}
//打印被还原的数组
for (int[] ints : arrayThree) {
for (int anInt : ints) {
System.out.print(anInt+"\t");
}
System.out.println();
}
}
}