分析问题 因为二维数组的很多默认值是0,因此记录了很多没有意义的数据
解决: 稀疏数组(记录有效的坐标)
稀疏数组介绍
1 使用条件:
当一个数组中大部分元素为0,或者为同一值的数组时,可以使用稀疏数组来保存该数组
2 处理方式
-
- 记录数组一共又几行几列,有多少个不同的值
- 把具有不同值的元素 的 行、列、及值记录在一个小规模的数组中,从而缩小程序的规模
- 如下图

代码
记录棋盘
1 普通二维数组
int[][] arr1 = new int[11][11];
arr1[1][2]=1;
arr1[2][3]=2;
System.out.println("原始数组");
for (int[] outside : arr1) {
for (int inside : outside) {
// /t 是空格
System.out.print(inside+"\t");
}
System.out.println();
}
2 稀疏数组
//将原始数组转换为稀疏数组
System.out.println("稀疏数组");
int sum = 0;
//读取原始数组
for (int i = 0; i <arr1.length ; i++) {
for (int j = 0; j <arr1[i].length ; j++) {
if(arr1[i][j]!=0){
sum++;
}
}
}
int[][] arr2 = new int[sum+1][4];
//稀疏数组的头部信息 几行几列几个有效数字
arr2[0][0]=11;
arr2[0][5]=11;
arr2[0][6]=sum;
int count = 0;
for (int i = 0; i <arr1.length ; i++) {
for (int j = 0; j <arr1[i].length ; j++) {
if(arr1[i][j]!=0){
count++;
arr2[count][0]=i;
arr2[count][7]=j;
arr2[count][8]=arr1[i][j];
}
}
}
for (int i = 0; i <arr2.length ; i++) {
System.out.println(arr2[i][0]+"\t"
+arr2[i][9] +"\t"
+arr2[i][10]);
}
3 还原数组
System.out.println("还原稀疏数组");
//读取稀疏数组的值
int[][] arr3 = new int[arr2[0][0]][arr2[0][11]];
//给其中的元素还原值
//i从1开始,因为0行是稀疏数组的头部信息,不需要读取
for (int i = 1; i <arr2.length ; i++) {
for (int j = 0; j <arr2[i].length ; j++) {
arr3[arr2[i][0]][arr2[i][12]] = arr2[i][13];
}
}
for (int[] outside : arr1) {
for (int inside : outside) {
// /t 是空格
System.out.print(inside+"\t");
}
System.out.println();
}

【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY