数据结构与算法01 稀疏数组

news/2024/11/29 3:43:03/

稀疏数组问题

 

当一个二维数组中大部分数据都是0,对这个数组直接进行存储会很浪费空间,因此利用稀疏数组进行压缩,稀疏数组第一行的第一个元素是原二维数组行数。,第一行的第二个元素是原二维数组的列数,如图为11行11列有2个有效值。

普通二维数组-->稀疏数组

思路:创建一个11*11的普通二维数组arr1,其中arr1[1][2]=1,arr1[2][3]=2,其余元素均为0。

Java代码:

        //原数组11*11int[][] array1 = new int[11][11];int sum=0;//非0元素的个数array1[1][2] = 1;array1[2][3] = 2;for (int[] row : array1) {for (int data : row) {System.out.print(data+"\t");if(data!=0){sum++;}}System.out.println('\n');}//创建稀疏数组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<11;i++){for(int j=0;j<11;j++){if(array1[i][j]!=0){count++;array2[count][0]=i;array2[count][1]=j;array2[count][2]=array1[i][j];}}}//打印稀疏数组for (int[] row : array2) {for (int data : row) {System.out.print(data+"\t");}System.out.println('\n');}

稀疏数组-->还原成普通二维数组

思路:首先从稀疏数组读取到原数组是几行几列的,接着读出有效值所在的行列并赋值给我们新创建的数组即可

Java代码:

  //还原,稀疏数组->原数组int m=array2[0][0];//11int n=array2[0][1];//11int[][] array3=new int[m][n];for(int i=1;i<sum+1;i++){//遍历稀疏数组array3[array2[i][0]][array2[i][1]]=array2[i][2];}//打印还原的数组for (int[] row : array3) {for (int data : row) {System.out.print(data+"\t");}System.out.println('\n');}

汇总代码:

package SparseArray;
public class SparseArray {public static void main(String[] args) {//原数组11*11int[][] array1 = new int[11][11];int sum=0;//非0元素的个数array1[1][2] = 1;array1[2][3] = 2;for (int[] row : array1) {for (int data : row) {System.out.print(data+"\t");if(data!=0){sum++;}}System.out.println('\n');}//创建稀疏数组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<11;i++){for(int j=0;j<11;j++){if(array1[i][j]!=0){count++;array2[count][0]=i;array2[count][1]=j;array2[count][2]=array1[i][j];}}}//打印稀疏数组for (int[] row : array2) {for (int data : row) {System.out.print(data+"\t");}System.out.println('\n');}//还原,稀疏数组->原数组int m=array2[0][0];//11int n=array2[0][1];//11int[][] array3=new int[m][n];for(int i=1;i<sum+1;i++){//遍历稀疏数组array3[array2[i][0]][array2[i][1]]=array2[i][2];}//打印还原的数组for (int[] row : array3) {for (int data : row) {System.out.print(data+"\t");}System.out.println('\n');}}
}

每日打卡一道数据结构与算法!!冲刺一百天,我要进大厂!!冲呀!!


http://www.ppmy.cn/news/40163.html

相关文章

Windows中使用7-Zip压缩或解压缩时报错解决:客户端没有所需的特权

1.报错 2.解决办法 点击开始&#xff0c;查看7-Zip 软件文件夹或者直接找到7-Zip 软件的安装路径&#xff0c;电击以管理员身份运行 找到需要压缩或者解压缩的文件的位置&#xff0c;完成&#xff01;

CSDN 编程竞赛四十二期题解

竞赛总览 CSDN 编程竞赛四十二期&#xff1a;比赛详情 (csdn.net) 竞赛题解 题目1、鬼画符门之宗门大比 给定整数序列A&#xff0c;求在整数序列A中连续权值最大的子序列的权值。 经典的子序列问题&#xff0c;和第二十一期考过的连续子数组的最大和一题解法相似。 维护一…

相对开音节OD-(Python)

相对开音节 题目描述 相对开音节构成的结构为: 辅音元音(aeiou)辅音(r除外) 常见的单词有bike cake 给定一个字符串&#xff0c;以空格为分隔符 反转每个单词的字母 若单词中包含如数字等其他非字母时不进行反转 反转后计算其中含有相对开音节结构的子串个数 (连续子串中部分…

ChatGPT的平替来了?一文总结 ChatGPT 的开源平替,你值得拥有

文章目录【AIGC精选】总结 ChatGPT 的开源平替&#xff0c;你值得拥有1.斯坦福发布 Alpaca 7B&#xff0c;性能匹敌 GPT-3.52.弥补斯坦福 Alpaca 中文短板&#xff0c;中文大模型 BELLE 开源3.国产AI大模型 ChatGLM-6B 开启内测4.中文 Alpaca 模型 Luotuo 开源5. ChatGPT 最强竞…

【周末闲谈】AI的旅途

个人主页&#xff1a;【&#x1f60a;个人主页】 系列专栏&#xff1a;【❤️周末闲谈】 系列目录 ✨第一周 二进制VS三进制 ✨第二周 文心一言&#xff0c;模仿还是超越&#xff1f; ✨第二周 畅想AR 文章目录系列目录前言AIAI的开端第一个AI程序AI的寒冬关于AI的思考末尾前言…

一些常用芯片

目录 一、FPGA 二、ADC 三、DAC 四、flash 五、ddr 六、电机驱动芯片 七、红外探测器 八、可见光senser 九、以太网phy 十、USB芯片 十 一、视频编解码芯片 十 二、放大器 十三、SRAM 十四、ARM 十五、屏 十六、filter 十七、超声传感器 十八、other 一、FPG…

苹果蓝牙耳机太贵了买哪个替代?苹果蓝牙耳机平替推荐

随着人们生活水平的提高&#xff0c;蓝牙耳机已经遍布在我们生活的各个角落。同时随着科技的发展&#xff0c;许多人果粉选择苹果耳机平替。下面我们一起来看看2023年有哪些适用于苹果的平替蓝牙耳机吧&#xff01; 一、南卡小音舱Lite2蓝牙耳机 蓝牙版本&#xff1a;5.3 售…

UEFI Device Path (1): 重新认识Device Path

从事UEFI开发的人员&#xff0c;对UEFI Device Path的概念都有一定了解&#xff0c;但未必都建立了比较系统而深刻的认识。UEFI Device Path的认知仅限于: 1)它是用来表示系统中设备的路径&#xff1b;2) 在UEFI SPEC中定义了它的数据结构和若干操作它的UEFI Protocol。除此以外…