数据结构与算法-数组与稀疏数组-笔记整理《二》

背景

二维数组如果数据很少的情况下,有很多默认值为0的无意义的数据,因此可转为稀疏数组

转换思路

原数组示例:
在这里插入图片描述
转换后示例:
在这里插入图片描述
思路描述:

  1. 稀疏数组列固定为3,其中第一行第一列代表原始数组一共有多少行,第一行第二列代表原始数组有多少列,第一行第三列代表原始数组一共有多少个值需要转化
  2. 稀疏数组从第二行开始,第一列代表原始数组第几行,第二列代表原始数组第几列,第三列代表具体的值
  3. 稀疏数组的行数为:原始数组有效值+1

代码示例

   public class SparseArray {
    
    	public static void main(String[] args) {
    		//原始数组
    		int chessArr1[][] = new int[5][5];
    		chessArr1[1][2] = 11;
    		chessArr1[3][3] = 22;
    		//遍历多少个非0个数
    		int sum = 0;
    		for (int i = 0; i < 5; i++) {
    			for (int j = 0; j < 5; j++) {
    				if (chessArr1[i][j] != 0) {
    					sum++;
    				}
    			}
    		}
    		//稀疏数组
    		int sparseArr[][] = new int[sum + 1][3];
    		sparseArr[0][0] = 5;//原始数组有5行
    		sparseArr[0][1] = 5;//原始数组有5列
    		sparseArr[0][2] = sum;//原始数组有sum个有效值
    
    		// 遍历二维数组,将非0的值存放到 sparseArr中
    		int count = 0; //count 用于记录是第几个非0数据
    		for (int i = 0; i < 5; i++) {
    			for (int j = 0; j < 5; j++) {
    				if (chessArr1[i][j] != 0) {
    					count++;
    					sparseArr[count][0] = i;
    					sparseArr[count][1] = j;
    					sparseArr[count][2] = chessArr1[i][j];
    				}
    			}
    		}
    
    		//稀疏数组还原二维数组
    		int chessArr2[][] = new int[sparseArr[0][0]][sparseArr[0][1]];
    		for(int i = 1; i < sparseArr.length; i++) {
    			chessArr2[sparseArr[i][0]][sparseArr[i][1]] = sparseArr[i][2];
    		}
    		printArr(chessArr2);//打印还原后的数组
    	}
    
    	private static void printArr(int[][] chessArr1) {
    		for (int[] row : chessArr1) {
    			for (int data : row) {
    				System.out.printf("%d\t", data);
    			}
    			System.out.println();
    		}
    	}
    
    }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值