稀疏数组
处理方法
- 第一行保存的是原二维数组的行、列以及非0值的个数
- 第二到九行保存的是每个非0值所在的位置及其数值
转换思路
二维数组转稀疏数组
- 遍历二维数组,得到二维数组中有效值的个数sum,创建稀疏数组,有sum+1行,3列(固定)
- 将二维数组中的有效值存入稀疏数组中
稀疏数组转二维数组
代码
public class SparseArray {
public static void main(String[] args) {
// 先定义一个二维数组 int[][] arr = new int[11][11]; // 随机在二维数组中插入几个非零的数 arr[0][3] = 31; arr[2][6] = 9; arr[5][8] = 65; arr[6][9] = 96; arr[4][1] = -1; arr[8][0] = 2; arr[10][1] = 101; // 循环遍历打印 for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr[i].length; j++) {
System.out.print(arr[i][j]+ " "); } System.out.println(); } // 获取二维数组中非零的个数 int sum = 0; for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr[i].length; j++) {
if (arr[i][j]!=0){
sum++; } } } System.out.println(sum); // 打印得到7个非零的数 / * 稀疏数组固定三列 行数不确定,行数 = 非零的个数+1 * 为什么要+1呢? 因为第一行固定的是你要稀疏的二维数组的维度 */ int sparse [][] = new int[sum+1][3]; sparse[0][0] = arr.length; sparse[0][1] = arr[0].length; sparse[0][2] = sum; // 定义一个count,来控制行号,从第二行开始,因为他的列索引的值已经固定好了。 int count = 1; for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr[i].length; j++) {
if (arr[i][j]!=0){
sparse[count][0] =i; sparse[count][1] =j; sparse[count][2] = arr[i][j]; count ++; } } } for (int i = 0; i < sparse.length; i++) {
for (int j = 0; j < sparse[i].length; j++) {
System.out.print(sparse[i][j]+" "); } System.out.println(""); } / * 稀疏数组转为二维数组 * 先定义好维度,稀疏数组[0][0]是二维数组的行数,稀疏数组[0][1]是二维数组的列数! */ int[][] newArr = new int[sparse[0][0]][sparse[0][1]]; // 遍历稀疏数组,将不为零的坐标还原到二维数组上 for (int i = 1; i < sparse.length ; i++) {
newArr[sparse[i][0]][sparse[i][1]] = sparse[i][2]; } // 遍历打印 for (int i = 0; i < newArr.length; i++) {
for (int j = 0; j < newArr[i].length; j++) {
System.out.print(newArr[i][j]+" "); } System.out.println(""); } } }
运行的结果
原二维数组 0 0 0 31 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 9 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 65 0 0 0 0 0 0 0 0 0 0 0 96 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 101 0 0 0 0 0 0 0 0 0 转为的稀疏数组 7 11 11 7 0 3 31 2 6 9 4 1 -1 5 8 65 6 9 96 8 0 2 10 1 101 稀疏数组转化得到的二维数组 0 0 0 31 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 9 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 65 0 0 0 0 0 0 0 0 0 0 0 96 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 101 0 0 0 0 0 0 0 0 0
发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/226949.html原文链接:https://javaforall.net
