稀疏数组(数据结构)

稀疏数组(数据结构)

  • 需求:编写五子棋游戏中,有存盘和续上盘的功能

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 1 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 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.记录数组一共有几行几列,有多少个不同值

​ 2.把具有不同值的元素和行列及值记录在一个小规模的数组中,从而缩小程序的规模

如图,左边原始数组,右边稀疏数组
请添加图片描述

package com.boss.array;public class ArrayDemo09 {public static void main(String[] args) {//1.创建一个二维数组11*11 0:没有棋子,1:黑 2:白int[][] array=new int[11][11];array[1][2]=1;array[2][3]=2;//输出原始数组System.out.println("输出原始数组");for (int[] ints : array) {for (int anInt : ints) {System.out.print(anInt+"\t");}System.out.println();}System.out.println("===============");//转换为稀疏数组保存//获取有效值的个数int sum=0;for (int i = 0; i <11 ; i++) {for (int j = 0; j <11 ; j++) {if(array[i][j]!=0){sum++;}}}System.out.println("有效值的个数"+sum);//创建一个稀疏数组的数组int[][] array1=new int[sum+1][3];array1[0][0]=11;array1[0][1]=11;array1[0][2]=sum;//遍历二维数组,将非零的值,存分到稀疏数组中int count=0;for (int i = 0; i <array.length ; i++) {for (int j = 0; j <array[i].length ; j++) {if(array[i][j]!=0){count++;array1[count][0]=i;array1[count][1]=j;array1[count][2]=array[i][j];}}}//输出稀疏数组System.out.println("稀疏数组");for (int i = 0; i <array1.length ; i++) {System.out.println(array1[i][0]+"\t"+array1[i][1]+"\t"+array1[i][2]+"\t");}System.out.println("===================");System.out.println("还原");//1.读取稀疏数组的值int[][] array2=new int[array1[0][0]][array1[0][1]];//2.给其中的元素还原他的值for (int i = 1; i <array1.length ; i++) {array2[array1[i][0]][array1[i][1]]=array1[i][2];}System.out.println("输出还原的数组");for (int[] ints : array2) {for (int anInt : ints) {System.out.print(anInt+"\t");}System.out.println();}}
}

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

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

相关文章

揭秘 Flink 1.9 新架构,Blink Planner 你会用了吗?

本文为 Apache Flink 新版本重大功能特性解读之 Flink SQL 系列文章的开篇&#xff0c;Flink SQL 系列文章由其核心贡献者们分享&#xff0c;涵盖基础知识、实践、调优、内部实现等各个方面&#xff0c;带你由浅入深地全面了解 Flink SQL。 1. 发展历程 今年的8月22日 Apache…

centos7 修改yum源为阿里源

# 1.先检查是否有wget命令&#xff0c;如果没有wget&#xff0c;先下载&#xff1a; yum install -y wget# 2.安装base reop源cd /etc/yum.repos.d# 3.接着备份旧的配置文件 mv CentOS-Base.repo CentOS-Base.repo.bak# 4.下载阿里源的文件 wget -O /etc/yum.repos.d/epel.re…

阿里面试官整理的JVM面试要点,99%的你都不知道!

最近网上出现一个面试题&#xff1a;“一个线程OOM后&#xff0c;其他线程还能运行吗&#xff1f;”网上出现了很多答案。这道题其实很有难度&#xff0c;涉及的知识点有jvm内存分配、作用域、gc等&#xff0c;不是简单的是与否的问题。在面试时被问到这个问题你是会哑口无言还…

开发函数计算的正确姿势——借助 Ghostscript 将 PDF 转换成 JPG

前言 首先介绍下在本文出现的几个比较重要的概念&#xff1a; 函数计算&#xff08;Function Compute&#xff09;&#xff1a;函数计算是一个事件驱动的服务&#xff0c;通过函数计算&#xff0c;用户无需管理服务器等运行情况&#xff0c;只需编写代码并上传。函数计算准备计…

面向对象编程(OOP)

面向对象编程&#xff08;OOP&#xff09; 面向过程&面向对象 面向过程思想&#xff08;线性&#xff09; ​ 1.步骤清晰简单&#xff0c;第一步做什么&#xff0c;第二步做什么…… ​ 2.面对过程适合处理一些较为简单的问题 面向对象思想&#xff08;分类&#xff0…

6 个 K8s 日志系统建设中的典型问题,你遇到过几个?

作者 | 元乙 阿里云日志服务数据采集客户端负责人&#xff0c;目前采集客户端 logtail 在集团百万规模部署&#xff0c;每天采集上万应用数 PB 数据&#xff0c;经历多次双 11、双 12 考验。 导读&#xff1a;随着 K8s 不断更新迭代&#xff0c;使用 K8s 日志系统建设的开发者…

腾讯视频云支持超300万场次直播带货 助力企业一天搭建直播间

5月21日&#xff0c;腾讯产业互联网沙龙通过腾讯会议线上举办&#xff0c;围绕“科技助力中小微企业破局”话题&#xff0c;腾讯视频云业务总经理李郁韬 、腾讯云生态建设总经理王莹、腾讯云云开发产品负责人王倩与数百家企业代表探讨了在疫情之下&#xff0c;中小微企业如何借…

CentOS 7.8使用devtoolset-9使用高版本gcc version 9.3.1

问题原因 CentOS 7的gcc版本为4.8.5&#xff0c;Redis 6.0.5最低需要gcc4.9&#xff0c;因此需要升级gcc版本 from redis 6.0.5, building redis from source code needs C11 support.The version of gcc in CentOS 7 is 4.8.5, but C11 was introduced in 4.9. 解决办法 1、手…

如何加快 Node.js 应用的启动速度

我们平时在开发部署 Node.js 应用的过程中&#xff0c;对于应用进程启动的耗时很少有人会关注&#xff0c;大多数的应用 5 分钟左右就可以启动完成&#xff0c;这个过程中会涉及到和集团很多系统的交互&#xff0c;这个耗时看起来也没有什么问题。 目前&#xff0c;集团 Serve…

技术人看《长安十二时辰》的正确姿势是?

阿里妹导读&#xff1a;从“叉手礼”、“水盆羊汤”、“酒晕妆”这些唐朝人的生活细节&#xff0c;到精美的坊间造型、充满意境的诗词歌赋&#xff0c;《长安十二时辰》不仅以缜密剧情赢得赞誉&#xff0c;更还原了一个真实的大唐长安。在精良制作之上&#xff0c;技术人如何让…

(进阶篇)Redis6.2.0 集群 主从复制_搭建_01

文章目录1. 部署划分2. 单机安装Redis3. 创建配置/数据/日志目录4. 修改配置文件5. redis启动6. 登录查看信息7. 读写分离1. 部署划分 ip角色192.168.92.100Master192.168.92.101Slave192.168.92.102Slave 2. 单机安装Redis 首先在在3台服务器上分别安装Redis单机环境 (单机)…

我们已经不用AOP做操作日志了! | 原力计划

来源 | JAVA葵花宝典责编 | 王晓曼、Carol 头图 | CSDN下载自东方IC前言用户在操作我们系统的过程中&#xff0c;针对一些重要的业务数据进行增删改查的时候&#xff0c;我们希望记录一下用户的操作行为&#xff0c;以便发生问题时能及时的找到依据&#xff0c;这种日志就是业务…

会向业务“砍需求”的技术同学,该具备哪6点能力?

阿里妹导读&#xff1a;“会”砍需求&#xff0c;并不是件容易的事情&#xff0c;这涉及到工程师的商业头脑&#xff0c;要会判断技术和业务的关系。技术与业务好比“两条腿”&#xff0c;相互配合才能走得更远。如何具备business sense就是我们今天的课题。 论工程师的商业头…

(进阶篇)Redis6.2.0 集群 主从复制_原理剖析_02

文章目录一、主从复制流程1. 主从复制流程图2. 主从复制日志二、主从复制信息剖析2.1. 主节点信息剖析2.2. 从节点信息剖析三、关键术语3.1. 复制功能开启3.2. 全量复制场景3.3. 主从复制异步性3.4. 过期key的处理3.5. 加速复制一、主从复制流程 1. 主从复制流程图 第一条线&a…

如何抢占云栖大会C位?史上最强强强攻略来了

如何抢占云栖大会C位&#xff1f;史上最强强强攻略来了 原文链接 本文为云栖社区原创内容&#xff0c;未经允许不得转载。

寻找榜样的力量!CSDN【百万人学 AI】评选活动重磅启动

AI 业界历经算法更迭、技术方案升级&#xff0c;有企业攻城略池&#xff0c;占据更多行业山头&#xff0c;有企业中途折戟沉沙。AI 发展浮浮沉沉&#xff0c;但每一年我们都希望审视当下&#xff0c;一窥未来。2020 无疑是特殊的一年&#xff0c;而 AI 在开年的这场”战疫“中表…

构造器详解(重要)

构造器详解&#xff08;重要&#xff09; 构造器快捷键 altinsert 构造器&#xff1a; 1. 和类名相同 2. 没有返回值 作用&#xff1a; 1.new 本质在调用构造方法 2.初始化对象的值 注意点&#xff1a; 1.定义有参构造之后&#xff0c;如果想使用无参构造&#xff0c;必须显示…

重构:改善饿了么交易系统的设计思路

我在2017年5月加入饿了么的交易部门&#xff0c;先后负责搜索、订单、超时、赔付、条约、交付、金额计算以及评价等系统&#xff0c;后期开始做些整体系统升级的工作。 这篇文章成型于交易系统重构一期之后&#xff0c;主要是反思其过程中做决策的思路&#xff0c;我没有使用「…

(进阶篇)Redis6.2.0 集群 主从复制_故障解决_03

文章目录一、 主从数据一致性1. 主多从少2. 主少从多3. 知识点补充二、 数据延迟2.1. 数据延迟因素2.2. 解决方案三、 脏数据3.1. 脏数据产生的场景3.2. 解决方案四、 数据安全性4.1. 场景4.2. 解决方案五、 规避全量复制5.1. 低峰时段5.2. 主节点变更5.3. 增大复制缓冲区六、 …

以“基”取胜:青立方超融合易捷版,助力企业“极简”上云

2020年春天&#xff0c;以云计算、5G、人工智能为代表的“新基建”蔚然成风&#xff0c;不仅助力中国产业智能化、信息化进入加速推进的快车道&#xff0c;促使全产业链迈开高质量发展的新步伐。更是面向长远&#xff0c;构筑数字经济创新发展之基。可以说&#xff0c;没有任何…