数据结构与算法 - 稀疏数组(理解+代码实现案例)

举例

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

稀疏数组第一行是原数据几行几列和几个有效数据的个数

下面的行是各个有效数组的行列与具体值

在这里插入图片描述

稀疏数组实现

在这里插入图片描述

代码实现

package DataStructures.sparsearray;/*** 二维数组转稀疏数组 与 稀疏数组转成二维数组*/
public class SparseArray {public static void main(String []args){//创建一个原始二维数组11*11//0:表示没有棋子,1:表示黑色棋子 , 2:表示蓝色棋子int chessArr1[][] = new int[11][11];chessArr1[1][2] = 1;chessArr1[2][3] = 2;chessArr1[4][5] = 2;//输出一下原数组for (int[] row : chessArr1){for (int data : row){System.out.printf("%d\t",data);}System.out.println();/*** 结果:* 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	2	0	0	0	0	0	0	0* 0	0	0	0	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	0	0	0	0	0* 0	0	0	0	0	0	0	0	0	0	0* 0	0	0	0	0	0	0	0	0	0	0* 0	0	0	0	0	0	0	0	0	0	0* 0	0	0	0	0	0	0	0	0	0	0*/}//将二维数组 转 稀疏数组的思路//1.先遍历二维数组,得到非0数据的个数int sum = 0;for (int i =0;i<chessArr1.length;i++){for (int j = 0; j < chessArr1[0].length; j++){if(chessArr1[i][j] != 0) {sum++;}}}// System.out.println(sum); //2//2.创建对应的稀疏数组int sparseArr[][] = new int[sum+1][3];//给稀疏数组第一行数据sparseArr[0][0] = 11;sparseArr[0][1] = 11;sparseArr[0][2] = sum;//把非0值存放到稀疏数组中int count = 0; //用于记录是第几个非0数据for (int i =0;i<chessArr1.length;i++){for (int j = 0; j < chessArr1[0].length; j++){if(chessArr1[i][j] != 0) {count++;sparseArr[count][0] = i;sparseArr[count][1] = j;sparseArr[count][2] = chessArr1[i][j];}}}//输出稀疏数组的形式System.out.println();System.out.println("得到的洗漱数组~~~~~~~~~~~");for (int i = 0; i<sparseArr.length;i++){for (int j = 0; j<sparseArr[0].length; j++){System.out.print(sparseArr[i][j]+"\t");}System.out.println();/*** 结果:* 得到的洗漱数组~~~~~~~~~~~* 11	11	3* 1	2	1* 2	3	2* 4	5	2*/}//将稀疏数组 --》 恢复成 原始的 二维数组/*** 1、先读取稀疏数组的第一行,根据第一行的数据,创建原始的二维数组* 2.再读取稀疏数组后几行的数据,并赋给 原始二维数组 即可。*/// 1.想读取稀疏数组的第一行,根据第一行的数据,创建原始的二维数组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];}//输出恢复后的稀疏数组for (int i = 0; i<chessArr2.length;i++){for (int j = 0; j<chessArr2[0].length; j++){System.out.print(chessArr2[i][j]+"\t");}System.out.println();/*** 结果:* 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	2	0	0	0	0	0	0	0* 0	0	0	0	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	0	0	0	0	0* 0	0	0	0	0	0	0	0	0	0	0* 0	0	0	0	0	0	0	0	0	0	0* 0	0	0	0	0	0	0	0	0	0	0* 0	0	0	0	0	0	0	0	0	0	0*/}}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/437622.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据结构 - 队列(非环形队列,以及优化成环形队列)

1&#xff09;队列的定义与实现形式-方式 2&#xff09;队列实现思路&#xff08;非环形&#xff0c;下面进行优化&#xff09; 3&#xff09;代码实现&#xff08;注意并不是环形&#xff09; package DataStructures.queue;import java.util.Scanner;/*** 使用数组模拟队列*…

爬取网易云音乐歌曲特色榜单信息

网易云音乐(iframe内的歌单) 刚开始学习做下记录 需要先下载好所需浏览器内核 我时谷歌&#xff0c;下载地址 http://chromedriver.storage.googleapis.com/index.html 然后没了&#xff0c;自己F12扒拉下就行了 运行&#xff1a; 左侧随便点击一个榜单后&#xff0c;复制ur…

数据结构 - 单链表(Linked List)实现在内存中实现数据以链表形式生成并根据序号排序

下面实现一个例子来进行学习 1&#xff09;介绍 单链表的逻辑结构 在内存中的实际结构 具体创建示意图&#xff1a; 2&#xff09;代码实现 例子 1。第一个程序在添加的时候并没有按照序号排序&#xff0c;如果在添加的时候把位置改变输出的时候序号会改变 package DataStr…

Mysql count() 语句

百万数据测试 select count(主键) from table 执行效率&#xff1a; select count(*) AS AGGREGATE from table 以上测试均再 navicat 工具进行 由于各种原因&#xff0c;sql执行时间可定存在一定误差&#xff0c;但最终结果不变。

phpStydy+wordpress 安装部署

1、先准备工具包 下载phpstudy&#xff0c;下载地址&#xff1a;https://www.xp.cn/ 下载wordpress &#xff0c;下载地址&#xff1a;https://cn.wordpress.org/download/ 2、安装phpStudy&#xff0c;下一步操作即可 3、安装完成后&#xff0c;检测环境配置&#xff0c;php、…

java数据结构 - 单链表(腾讯面试题实现单链表反转)

直接上实现代码 //单链表的反转public static void reverseList(HeroNode head){//如果当前链表为空&#xff0c;或只有一个节点&#xff0c;无需反转if (head.next null || head.next.next null){return ;}//定义一个辅助变量&#xff0c;帮助我们遍历HeroNode cur head.n…

数据结构 - 链表(双向链表学习)

程序里有几个注释的地方还是需要特别注意的&#xff0c;根据单链表自己的逻辑来写一遍双向链表&#xff0c;可能有几个细节处理的不到位。 package DataStructures.LinkedList;public class DoubleLinkedListDemo {public static void main(String []args){System.out.println…

【转】Mac下 如何配置虚拟机软件Parallel Desktop--超详细

Mac下 如何配置虚拟机软件Pparallel Desktop--超详细 Mac 的双系统解决方案有两种&#xff0c;一种是使用Boot Camp分区安装独立的Windows&#xff0c;一种是通过安装Parallels Desktop一类的虚拟机软件运行Windows。采用虚拟机的方式优势更明显&#xff0c;可以灵活的在两个系…

数据结构 - 链表(单向环形链表)(约瑟夫问题)

问题如下&#xff08;与分析&#xff09; 构建思路 输入一个数&#xff0c;数到这个数的小孩出圈&#xff0c;出圈顺序的思路 代码实现 根据图解&#xff0c;来一步一步实现 //根据用户输入&#xff0c;计算小孩出圈顺序/**** param startNo 表示从第几个小孩开始数数* param …

【转】什么是ERP、SCM、CRM?

ERP、SCM、CRM的区别 &#xff08;1&#xff09;从管理理念上来说&#xff0c;ERP的管理理念是提高企业内部资源的计划和控制能力&#xff0c;讲究的是在满足客户、及时交货的同时最大限度地降低各种成本&#xff0c;通过提高内部运转效率来提高对客户的服务质量&#xff0c;是…

【转】理解OAuth 2.0

作者&#xff1a; 阮一峰 日期&#xff1a; 2014年5月12日 OAuth是一个关于授权&#xff08;authorization&#xff09;的开放网络标准&#xff0c;在全世界得到广泛应用&#xff0c;目前的版本是2.0版。 本文对OAuth 2.0的设计思路和运行流程&#xff0c;做一个简明通俗的解…

数据结构- 栈(实现综合计算器)(一位数计算 扩展到 多位数计算)

思路 代码&#xff08;可以看到这里的数字只能是单位数字&#xff0c;那么如何改成可以是多位数呢&#xff1f;&#xff01;往下看&#xff09; package stack;public class Calculator {public static void main(String[] args) {//完成表达式运算String expression "7…

数据结构 - 栈(数组模拟栈操作)

数组模拟栈操作 package stack;import java.util.Scanner;public class ArrayStackDemo {public static void main(String[] args) {//测试ArrayStack//创建栈ArrayStack arrayStack new ArrayStack(4);String key "";boolean loop true;Scanner sc new Scanner…

【转】visual studio 2019 (vs) 显示右侧缩略图_缩略图_滚动条

1. 工具 -> 选项 2. 文件编辑器 -> 选项对应的语言(Basic, C#, C/C....) -> 行为 -> 使用垂直滚动条的缩略图模式&#xff08;M&#xff09; 效果&#xff1a;

数据结构 - 栈 (逆波兰计算器)(栈的三种表达式)(前缀、中缀和后缀表达式,后缀也叫逆波兰表达式)(中缀表达式转后缀表达式实现步骤及完整代码)

栈的三种表达式&#xff1a;前缀、中缀和后缀表达式&#xff0c;后缀也叫逆波兰表达式 前缀&#xff08;波兰表达式&#xff09; 中缀&#xff08;对人来讲很好理解&#xff0c;对于计算机来讲就方便了&#xff0c;一般会把中缀表达式转换成后缀表达式&#xff09; 后缀&#…

数据结构与算法 - 递归回溯(迷宫问题)

递归的概念 简单说就是方法自己调用自己&#xff0c;每次调用时传入不同的变量&#xff0c;递归有助于编程者解决复杂的问题&#xff0c;同时可以让代码简介 递归的调用机制 递归能解决什么问题 递归需要遵守的重要规则 下面用代码来实现一个迷宫问题 主要代码&#xff08;这…

【转】Web Reference和Service Reference的区别

今天因为项目需要使用服务引用&#xff0c;就按之前的经验添加上了&#xff0c;步骤如下&#xff1a; 项目根目录——引用——右键——添加服务引用——高级——添加Web引用——输入接口的URL地址——回车&#xff08;下方出现的就是接口的定义的方法&#xff09;——修改Web引…

数据结构 - 递归 回溯算法(八皇后问题)

游戏地址自己写完了可以根据结果去测试一下。 算法分析 八皇后问题算法思路分析 1&#xff09;第一个皇后先放第一行第一列 2&#xff09;第二个皇后放在第二行第一列、然后判断是否OK&#xff0c; 如果不OK&#xff0c;继续放在.第二列、第三列、依次把所有列都放完&#x…

算法 - 排序算法 的时间复杂度计算

简介 度量一个程序(算法)执行时间的两种方法 1&#xff09;事后统计的方法这种方法可行, 但是有两个问题&#xff1a;一是要想对设计的算法的运行性能进行评测&#xff0c;需要实际运行该程序&#xff1b;二是所得时间的统计量依赖于计算机的硬件、软件等环境因素, 这种方式&a…

【转】Magento2目录结构

目录结构 可以看到,M2的目录挺多的。 我们依次来讲解下, 我这里截取的是github里的源代码,核心代码跟composer和官网下载的源码包的存放路径不一样。 如果是github下载的&#xff0c;那么m2的核心源代码就在app/code/Magento里。 如果是composer安装或者官网下载的源码包&#…