稀疏数组(数据结构)

稀疏数组(数据结构)

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

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…

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

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

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

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

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

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

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

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

我们已经不用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 在开年的这场”战疫“中表…

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

我在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;没有任何…

从零开始入门 K8s| K8s 的应用编排与管理

一、资源元信息 1. Kubernetes 资源对象 我们知道&#xff0c;Kubernetes 的资源对象组成&#xff1a;主要包括了 Spec、Status 两部分。其中 Spec 部分用来描述期望的状态&#xff0c;Status 部分用来描述观测到的状态。 今天我们将为大家介绍 K8s 的另外一个部分&#xff0c…

创建对象内存分析

创建对象内存分析 package com.oop.demo03;public class Pet {public String name;public int age;public void shout(){System.out.println("叫了一声");}}/* //一个项目应该这存在一个main方法 public class Application {public static void main(String[] args) …

AliOS Things 维测典型案例分析 —— 内存泄漏

维测典型案例分析1 —— 内存泄漏 在系统运行的过程中&#xff0c;内存泄漏是较为常见但是很难复现的现象&#xff0c;一般的内存泄漏点都是比较隐蔽的&#xff0c;每次几十个字节的泄漏&#xff0c;往往需要压测很久才能复现问题。本节案例分析&#xff0c;我们从一个已经压测…

(进阶篇)Redis6.2.0 集群 哨兵模式_搭建_01

文章目录一、概念架构简述1. Redis Sentinel简述2. Redis Sentinel优点3. Redis Sentinel缺点二、redis 3节点2.1. 101节点配置2.2. 102节点配置2.3. 103节点配置三、哨兵搭建实现3.1. 101节点配置3.2. 102节点配置3.3. 103节点配置3.4. 启动哨兵3.5. sentinel 监控3.6. 哨兵验…

服务器软件大扫盲!

来源 | 沉默王二责编 | Carol头图 | CSDN下载自视觉中国先说一句哈&#xff0c;自从在 B 站开始刷视频后&#xff0c;我就觉得要学的内容实在是太多了。这篇“服务器软件大扫盲”就是我看了羊哥的一期视频后有感而发的&#xff0c;比如说 Web 服务器、HTTP 服务器、应用服务器这…

Flutter浪潮下的音视频研发探索

导读&#xff1a;本文来自 LiveVideoStack 线上分享第三季&#xff0c;第十期阿里巴巴闲鱼事业部无线开发专家陈炉军带来的分享内容&#xff0c;针对闲鱼APP在当下流行的跨平台框架Flutter的大规模实践&#xff0c;介绍其在音视频领域碰到的一些困难以及解决方案。 大家好&…

(进阶篇)Redis6.2.0 集群 哨兵模式_哨兵工作原理_02

文章目录1. 主从复制哨兵架构图2. 定时任务3. 主观下线4. 客观下线5. 仲裁6. 哨兵工作原理1. 主从复制哨兵架构图 2. 定时任务 Sentinel内部有3个定时任务分别是&#xff1a; 每1秒每个Sentinel对其他Sentienl和Redis节点执行 PING 操作(监控)每2秒每个Sentinel通过Master节点…