稀疏数组
为什么要用稀疏数组?
- 二维数组存在大量的0或者同一值时,可以使用稀疏数组来保存该数组
稀疏数组
1.1.创建数组
int[][] array1 = new int[11][11];
array1[1][2] = 1;
array1[2][3] = 1;
1.2.输出原始数组
System.out.println("输出原始的数组:");
for(int[] ints:array1){
for(int anInt:ints){
System.out.print(anInt+"\t");
}
System.out.println();
}
1.3.转换为稀疏数组保存
int sum = 0;
for(int i = 0;i < array1.length;i++){
for(int j = 0;j < array1[i].length;j++){
if(array1[i][j] != 0){
sum++;
}
}
}
System.out.println("有效值的个数"+sum);
2.1创建稀疏数组
int[][] array2 = new int[sum+1][3];
array2[0][0] = 11;
array2[0][1] = 11;
array2[0][2] = sum;
2.2遍历二维数组,将非零的值,存放稀疏数组中
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];
}
}
}
2.3输出稀疏数组
System.out.println("稀疏数组:");
for(int i = 0;i < array2.length;i++){
System.out.println(array2[i][0]+"\t"+array2[i][1]+"\t"+"\t"+array2[i][2]);
}
2.4还原稀疏数组
System.out.println("还原稀疏数组:");
int[][] array3 = new int[array2[0][0]][array2[0][1]];
for(int i = 1;i <= array2[0][2];i++ ){
array3[array2[i][0]][array2[i][1]] = array2[i][2];
}
2.5输出还原后的数组
System.out.println("还原后的数组:");
for(int i = 0;i < array3.length;i++){
for(int j = 0;j < array3[i].length;j++){
System.out.print(array3[i][j]+"\t");
}
System.out.println();
}
完整例子
package com.kuang.array;
public class 稀疏数组 {
public static void main(String[] args) {
int[][] array1 = new int[11][11];
array1[1][2] = 1;
array1[2][3] = 1;
System.out.println("输出原始的数组:");
for(int[] ints:array1){
for(int anInt:ints){
System.out.print(anInt+"\t");
}
System.out.println();
}
int sum = 0;
for(int i = 0;i < array1.length;i++){
for(int j = 0;j < array1[i].length;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"+"\t"+array2[i][2]);
}
System.out.println("还原稀疏数组:");
int[][] array3 = new int[array2[0][0]][array2[0][1]];
for(int i = 1;i <= array2[0][2];i++ ){
array3[array2[i][0]][array2[i][1]] = array2[i][2];
}
System.out.println("还原后的数组:");
for(int i = 0;i < array3.length;i++){
for(int j = 0;j < array3[i].length;j++){
System.out.print(array3[i][j]+"\t");
}
System.out.println();
}
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人