代码编织梦想

1.稀疏算法的目的就是储存的时候,不用储存那么多,节省空间(时间换空间)。

稀疏数组:就是无效值(可以是规定值吧,相同的比较多)比较多,很稀疏,其实就是把原来的数组(这个数组有多个相同的值,这里是0,因为默认值为0,无值的情况默认0,不用设置值,而其他的值要设置值),通过规律来创建一个新的数组(值较少,且可以按一定规律还原为原数组),然后储存起来,然后。
思路如下:
原数组–》稀疏数组–》储存–》拿出来–》还原–》使用。
在这里插入图片描述
其中下面的表示原数组在这里插入图片描述
下面的表示稀疏数组
在这里插入图片描述
在这里插入图片描述
代码(储存省略):

public class SparseArray2 {
    public static void main(String[] args) {
        int chessArr1[][]=new int[11][11];
        chessArr1[1][2]=1;
        chessArr1[2][3]=2;
        for (int[] ints : chessArr1) {
            System.out.println();
            for (int anInt : ints) {
                System.out.printf("%d\t",anInt);
            }
        }
        /**
         * 先获取有效值,这里是2个
         * 对整个数组进行遍历,比较是否为0,来判断值
         */
        int count=0;
        for (int[] ints : chessArr1) {
            for (int anInt : ints) {
                if (anInt!=0) {
                    count++;
                }
            }
        }
        System.out.println("\n有效值的个数:"+count);
        //设置稀疏数组的行与列
        int sparseArr[][]=new int[count+1][3];
        //todo 赋值
        //第一行的值
        sparseArr[0][0]=chessArr1.length;
        sparseArr[0][1]=chessArr1[0].length;
        sparseArr[0][2]=count;
        //剩下行的值
        for (int i = 0; i < 11; i++) {
            for (int j = 0; j < 11; j++) {
                if (chessArr1[i][j]!=0) {
                    sparseArr[i][0]=i;
                    sparseArr[i][1]=j;
                    sparseArr[i][2]=chessArr1[i][j];
                }
            }
        }
        //打印稀疏数组
        System.out.println("打印稀疏数组");
        for (int[] ints : sparseArr) {
            System.out.println();
            for (int anInt : ints) {
                System.out.printf("%d\t",anInt);
            }
        }
        //todo 恢复回去
        //大致行与列
        int renew[][]=new int[sparseArr[0][0]][sparseArr[0][1]];
        //赋值
        for (int i = 1; i < sparseArr.length; i++) {
            int i0 = sparseArr[i][0];
            int i1 = sparseArr[i][1];
            int i2 = sparseArr[i][2];
            renew[i0][i1]=i2;
        }
        System.out.println("\n打印稀疏数组还原");
        for (int[] ints : renew) {
            System.out.println();
            for (int anInt : ints) {
                System.out.printf("%d\t",anInt);
            }
        }






    }
}
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/sunweihao2019/article/details/122916821

数据结构与算法之稀疏数组_皓晨的架构笔记的博客-爱代码爱编程

前言 讲稀疏数组前,我先假设一个场景。比如说,我们要编写一个五子棋程序,下面这个10*10的数组就代表这我们这个游戏的棋盘。数组中,1代表白棋,2代表黑棋。 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0

数据结构与算法(java版)之稀疏数组-爱代码爱编程

标题数据结构与算法(java版)之稀疏数组 1数据结构和算法的关系 1.1 数据 data 结构(structure)是一门研究组织数据方式的学科,有了编程语言也就有了数据结构.学好数据结构可以编写出更加漂亮,更加有效率的代码。 1.2 程序 = 构 数据结构+ 算法。 1.3 数据结构是算法的基础, 换言之,想要学好算法,需要把数据结构学到位。 2

数据结构和算法之稀疏数组-爱代码爱编程

一、案例 五子棋程序,只有两种颜色的子,连成五个就gameover。可能一个棋盘能放下100枚棋子,但是总占用空间只有不到10个,游戏就over了。那么这样存储到本地file的话,空间是极大的浪费的。这就引出了稀疏数组。 二、稀疏数组应用场景 当一个数组中大部分元素都是0(或是同一个值)的时候,就可以用稀疏数组来保存此数组。 三、什么是稀疏数组

数据结构与算法--稀疏数组 Python实现稀疏数组 稀疏数组 python描述-爱代码爱编程

阅读目录 概念及思路实现 概念及思路 先看一个需求:稀疏数组:稀疏数组的转换规则: (1)第0行用来统计:包括三个重要录入元素:有多少行(用len(row),行的索引是从0开始的);有多少列(用len(col),但列的索引从0开始);通过行和列确定的一行中某一个值 (2)行的增加过程是:先从原数组中一行一行的读取,要读取完本行中所含的所有数据

Java数据结构与算法之稀疏数组-爱代码爱编程

1、稀疏数组定义 稀疏数组(sparse array)是一种只为数组中的非零元素分配内存的特殊类型数组,内存中存储了数组中非零元素的下标和值。 2、稀疏数组与二维数组 普通二维数组 二维数组转稀疏数组后 稀疏数组图解 将二维数组转称稀疏数组之后,在稀疏数组中存储的是二维数组中所有非0(不一定是非0,在实际应用中,可能是数组中大量存在的

JAVA数据结构与算法之稀疏数组-爱代码爱编程

前言: *数据结构是计算机存储、组织数据的方式。数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。通常情况下,精心选择的数据结构可以带来更高的运行或者存储效率。 目录 稀疏数组稀疏数组简介:存储方式(非链式存储):代码实现:完整程序测试: 稀疏数组 稀疏数组简介: 当一个数组中大部分数据均为0(均为同一个数值) 时,可以用稀疏数组来

数据结构与算法 稀疏数组-爱代码爱编程

稀疏数组 当一个数组中大部分元素为0或者为同一个值时,可以使用稀疏数组来保存该数组。 把一个大部分元素为0的数组转化为稀疏数组的方法: 记录数组一共有几行几列,有多少个不同的值把具有不同值的元素的行列及值记录在一个小规模的数组中,从而缩小程序的规模 稀疏数组的本质就是元素为三元组的数组。 稀疏数组应用: 在科学与工程领域中求解线性模型时经常出

Java数据结构与算法——稀疏数组与二维数组的转换-爱代码爱编程

二维数组与稀疏数组的互相转换 基本介绍: 当一个数组大部分元素为0,或者为同一个值的数组时,可以使用稀疏数组来保存该数组。 稀疏数组的处理办法: (1)、记录数组一共有几行几列,有几个不同的值。 (2)、把具有不同的值的元素的行列及值记录在一个小规模的数组中,从而缩小程序的规模。应用实例 1)、使用稀疏数组来保留之前的二维数组(棋盘、地图) 2)、把稀疏

java数据结构和算法(1):二维数组与稀疏数组的转换-爱代码爱编程

  这里首先提出一个实际的例子:五子棋程序.在五子棋中,两个人下完棋之后可以将下好的棋存在文件中,或者说因突然有事,两个人无法继续下五子棋,这个时候就需要将五子棋下的位置记录起来存到文件中去.   如何存储五子棋盘?这里我们可以用到二维数组,没下的点可以用0表示,下的白棋用1表示,下的黑棋可以用2,表示.:如上图所示:有一个明显的问题,如何说存放的0太多了

数据结构与算法-稀疏数组-爱代码爱编程

数据结构与算法-稀疏数组 个人理解:稀疏数组其实就是对二维数组的压缩,当一个二维数组中大部分元素为0,或者大部分元素相同时可以通过稀疏数组来保存该数组。 处理方法:记录数组一共几行几列,有多少个不同的值;把具有不同值的元素的行和列记录在一个小规模数组中,从而达到压缩原数组的目的。 二维数组转稀疏数组思路: 1.遍历原始数组的二维数组,得到有效数据的个

数据结构与算法系列(1)稀疏数组详解-爱代码爱编程

数据结构之稀疏数组 1、 什么是稀疏数组?2、稀疏数组适用的场景3、代码实现 1、 什么是稀疏数组? 稀疏数组是对多维数组进行压缩的技术。当一个数组中大部分元素为空或者为同一个值的时候,可以使用稀疏数组来保存该数组。比如在一个6×7的二维数组当中(如下图),实际只有7个有效的元素,如果不经过处理,全部存储的话,需要占42个位置。而实际只有7个

数据结构与算法学习之稀疏数组-爱代码爱编程

稀疏数组 1、先看一个实际的需求 编写的五子棋程序中,有存盘退出和续上盘的功能 对于这样的一个五子棋程序,我们可以用一个二维数组来存储棋子的位置,来实现对棋盘的复原 分析问题 因为该二维数组的很多值是默认值0, 因此记录了很多没有意义的数据.->稀疏数组。(达到压缩的效果) 2、基本介绍 当一个数组中大部分元素

【尚硅谷Java数据结构与算法】稀疏数组-爱代码爱编程

更多内容参考:https://www.yuque.com/zhangshuaiyin/algorithms 1. 实际需求 编写的五子棋程序中,有存盘退出和续上盘的功能。 分析问题: 因为该二维数组的很多值是默认值 0, 因此记录了 很多没有意义的数据。 这个时候就可以使用稀疏数组来压缩二维数组。 2. 基本介绍 当一个数组中大部分元素为

数据结构与算法——稀疏数组-爱代码爱编程

数据结构与算法——稀疏数组 (学习内容为尚硅谷韩顺平老师的JAVA数据结构与算法)1、什么是稀疏数组: 当一个数组中大部分元素为0,或者为同一个值的数组时,可以使用稀疏数组来保存该数组。2、稀疏数组的处理方法: 记录数组一共有几行几列,有多少个不同的值把具有不同值的元素的行列及值记录在一个小规模的数组中,从而缩小程序的规模3、二维数组->稀疏数组

20220414在MT6739的Android10系统下开启导航栏NavigationBar(虚拟按键)-爱代码爱编程

20220414在MT6739的Android10系统下开启导航栏NavigationBar(虚拟按键) 2022/4/14 18:00 导航栏NavigationBar 1、源码部分: frameworks/base/services/core/java/com/android/server/policy/PhoneWindowManager.jav

Android webView 的一个坑,字体怎么突然变小了-爱代码爱编程

搜索发现 Web 网页的代码适配单位是 rem,有点类似于 dp。 Web 网页在适配分辨率的时候,通常会设置 viewport 属性 于是我尝试在代码里面加了这样的代码,发现 SignatureWebView 显示个性签名又正常了。 parsedHtml += “<meta name=“viewport” content=“width=dev