稀疏数组使用场景:
当一个二维数组中很多元素为0或为同一个值时,可以用稀疏数组保存该数组。
稀疏数组使用方法
1.先统计原二维数组行和列数,以及有多少个不为0的数或多少个不同的数。
2.创建一个二维数组作为稀疏数组,第一行分别存放行数、列数、多少个不为0的数或多少个不同的数。
3.遍历数组,将每个不为0的数或每个不同的数的行标、列标、值分别存放到稀疏数组中。
使用Java代码实现:
public static void main(String[] args) { //创建棋盘并初始化棋子位置,1代表黑子,2代表蓝子 int[][] chessBoard = new int[11][11]; chessBoard[1][1] = 1; chessBoard[2][2] = 2; chessBoard[4][7] = 2; //统计非零数据总数 int notZeros = 0; for(int[] row : chessBoard) { for(int element : row) { if(0!=element) notZeros++; } } //创建稀松数组并赋值 int[][] sparseArr= new int[notZeros+1][3]; sparseArr[0][0] = 11; sparseArr[0][1] = 11; sparseArr[0][2] = notZeros; int count = 0; for(int i=0;i<chessBoard.length;i++) { for(int j=0;j<chessBoard[0].length;j++) { if(0!=chessBoard[i][j]) { count++; sparseArr[count][0] = i; sparseArr[count][1] = j; sparseArr[count][2] = chessBoard[i][j]; } } } //解析稀松数组为普通数组 int newRow = sparseArr[0][0]; int newCol = sparseArr[0][1]; int[][] chessBoard1 = new int[newRow][newCol]; for(int i=1;i<sparseArr.length;i++) { int row1 = sparseArr[i][0]; int col1 = sparseArr[i][1]; int val = sparseArr[i][2]; chessBoard1[row1][col1] = val; } sop("初始棋盘为:\n",""); //打印棋盘 for(int[] row : chessBoard) { for(int element : row) { sop("%d ",element); } sop("\n",""); } sop("存储棋盘的稀松数组为:\n",""); //打印稀松数组 for(int[] row : sparseArr) { for(int element : row) { sop("%d ",element); } sop("\n",""); } sop("稀松数组转棋盘为:\n",""); //打印棋盘 for(int[] row : chessBoard1) { for(int element : row) { sop("%d ",element); } sop("\n",""); } //sop("%d",notZeros); } public static void sop(String str,Object obj1) { System.out.printf(str,obj1); } }
实现效果:
public static void main(String[] args) {
//创建棋盘并初始化棋子位置,1代表黑子,2代表蓝子
int[][] chessBoard = new int[11][11];
chessBoard[1][1] = 1;
chessBoard[2][2] = 2;
chessBoard[4][7] = 2;
//统计非零数据总数
int notZeros = 0;
for(int[] row : chessBoard) {
for(int element : row) {
if(0!=element) notZeros++;
}
}
//创建稀松数组并赋值
int[][] sparseArr= new int[notZeros+1][3];
sparseArr[0][0] = 11;
sparseArr[0][1] = 11;
sparseArr[0][2] = notZeros;
int count = 0;
for(int i=0;i<chessBoard.length;i++) {
for(int j=0;j<chessBoard[0].length;j++) {
if(0!=chessBoard[i][j]) {
count++;
sparseArr[count][0] = i;
sparseArr[count][1] = j;
sparseArr[count][2] = chessBoard[i][j];
}
}
}
//解析稀松数组为普通数组
int newRow = sparseArr[0][0];
int newCol = sparseArr[0][1];
int[][] chessBoard1 = new int[newRow][newCol];
for(int i=1;i<sparseArr.length;i++) {
int row1 = sparseArr[i][0];
int col1 = sparseArr[i][1];
int val = sparseArr[i][2];
chessBoard1[row1][col1] = val;
}
sop("初始棋盘为:\n","");
//打印棋盘
for(int[] row : chessBoard) {
for(int element : row) {
sop("%d ",element);
}
sop("\n","");
}
sop("存储棋盘的稀松数组为:\n","");
//打印稀松数组
for(int[] row : sparseArr) {
for(int element : row) {
sop("%d ",element);
}
sop("\n","");
}
sop("稀松数组转棋盘为:\n","");
//打印棋盘
for(int[] row : chessBoard1) {
for(int element : row) {
sop("%d ",element);
}
sop("\n","");
}
//sop("%d",notZeros);
}
public static void sop(String str,Object obj1) {
System.out.printf(str,obj1);
}