稀疏数组

public class SparseArray {
public static void display(int arr[][]) {
for (int[] i : arr) {
for (int j : i) {
System.out.printf("%s\t", j);
}
System.out.println();
}
}
/**
* 二维数组转成稀疏数组
*
* @param arrs
*/
public static void toSparse(int arrs[][]) {
int nums = 0; //有效数据
int col = arrs[0].length; //行数
int row = arrs.length;//列数
for (int[] arr : arrs) {
for (int i : arr) {
if (i != 0) {
nums++;
}
}
}
int[][] sparse = new int[nums + 1][3];
sparse[0][0] = row;
sparse[0][1] = col;
sparse[0][2] = nums;
int index = 1;
for (int i = 0; i < row; i++) {
for (int j = 0; j < col; j++) {
if (arrs[i][j] != 0) {
sparse[index][0] = i;
sparse[index][1] = j;
sparse[index][2] = arrs[i][j];
index++;
}
}
}
System.out.println("二维转稀疏数组:");
display(sparse);
System.out.println();
sparse(sparse);
}
/**
* 稀疏数组转二维数组
*/
public static void sparse(int sparseArr[][]) {
int row = sparseArr[0][0],
col = sparseArr[0][1],
nums = sparseArr[0][2];
int[][] arr = new int[row][col];
for (int i = 1; i <= nums; i++) {
int[] ints = sparseArr[i];
arr[ints[0]][ints[1]] = ints[2];
}
System.out.println("稀疏数组还原:");
display(arr);
System.out.println();
}
public static void main(String[] args) {
int arr[][] = new int[5][10];
arr[1][3] = 4;
arr[1][2] = 2;
arr[2][3] = 3;
arr[4][2] = 5;
toSparse(arr);
System.out.println("原始数组:");
display(arr);
}
}

output:

二维转稀疏数组:
5 10 4
1 2 2
1 3 4
2 3 3
4 2 5
稀疏数组还原:
0 0 0 0 0 0 0 0 0 0
0 0 2 4 0 0 0 0 0 0
0 0 0 3 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 5 0 0 0 0 0 0 0
原始数组:
0 0 0 0 0 0 0 0 0 0
0 0 2 4 0 0 0 0 0 0
0 0 0 3 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 5 0 0 0 0 0 0 0
Process finished with exit code 0
posted @   webzom  阅读(20)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示