Java 数据结构

|--适用场景

当一个数组中有大量重复数字的时候可以使用稀疏数组来压缩这个数组,从而减少对资源的耗费

|--笔记

|--代码

1 1 package structure; 2 2 3 3 /** 4 4 * @auther::9527 5 5 * @Description: 稀疏数组 6 6 * @program: news_chapter06_02 7 7 * @create: 2019-10-01 17:26 8 8 */ 9 9 public class SparseArry { 1010 public static void main(String[] args) { 1111 //创建一个原始的二维数组 11*11 1212 // 0:代表没有棋子 1表示黑子 2表示蓝子 1313 int chessArr1[][]=new int[11][11]; 1414 chessArr1[1][2]=1; 1515 chessArr1[2][3]=2; 1616 chessArr1[4][5]=2; 1717 1818 //输出原始的二维数组 1919 System.out.println("原始的二维数组:"); 2020 for (int[] row :chessArr1) { 2121 for(int data:row) { 2222 System.out.printf("%d\t",data); 2323 } 2424 System.out.println(); 2525 } 2626 2727 //将二维数组 转 稀疏数组 2828 //1、遍历二维数组 得到非0数据的个数 2929 int sum = 0; //计数器 3030 for (int i=0;i<11;i++) { 3131 for(int j = 0; j<11;j++) { 3232 if(chessArr1[i][j]!=0) { 3333 sum++; 3434 } 3535 } 3636 } 3737 System.out.println("非0数字共有 "+sum+" 个"); 3838 3939 //2、创建对应的稀疏数组 4040 int sparseArr[][]=new int[sum+1][3]; //行数=有效数据量+1 列数=3 4141 //给稀疏数组赋值 第一行:依次存放:行、列、有效数据数量 4242 sparseArr[0][0]=11; 4343 sparseArr[0][1]=11; 4444 sparseArr[0][2]=sum; 4545 4646 //遍历二维数组,将非0的值存放到sparseArr中 4747 int count = 0; // 记录第几个数字时非0数据 4848 for(int i=0;i<11;i++) { 4949 for(int j=0;j<11;j++) { 5050 if(chessArr1[i][j]!=0) { 5151 count++; 5252 sparseArr[count][0]=i; //行坐标 5353 sparseArr[count][1]=j; //列坐标 5454 sparseArr[count][2]=chessArr1[i][j]; //坐标对应数值 5555 } 5656 } 5757 } 5858 5959 //输出稀疏数组的形式 6060 System.out.println("********-------我是分割线--------********"); 6161 System.out.println("得到的稀疏数组为:"); 6262 for(int i =0;i<sparseArr.length;i++) { 6363 System.out.printf("%d\t%d\t%d\t\n",sparseArr[i][0],sparseArr[i][1],sparseArr[i][2]); 6464 } 6565 6666 6767 //将稀疏数组回复成原始的二维数组 6868 /** 6969 * 思路:1、先读取稀疏数组的第一行,根据第一行的数据,创建原始的二维数组 7070 * 2、继续读取稀疏数组后几行的数据,并赋值给原始的二维数组 7171 */ 7272 //读取第一行 7373 int afterArr[][]=new int[sparseArr[0][0]][sparseArr[0][1]]; 7474 7575 //读取稀疏数组剩下的并赋值给二维数组,由于第一行存的是坐标信息,所以赋值从第二行开始 7676 for(int i=1;i<sparseArr.length;i++) { 7777 afterArr[sparseArr[i][0]][sparseArr[i][1]]=sparseArr[i][2]; 7878 } 7979 8080 System.out.println("**************************\n"); 8181 //输出一下还原的二维数组看下是否和原数组一致 8282 for(int []row:afterArr) { 8383 for(int data:row) { 8484 System.out.printf("%d\t",data); 8585 } 8686 System.out.println(); 8787 } 8888 } 8989 }

稀疏数组

点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

2020年前端实用代码段,为你的工作保驾护航

有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )