Java稀疏数组

Java稀疏数组当一个数组中大部分元素为 或者为同一个值的数组时 可以使用稀疏数组来保存该数组 记录数组一共有几行几列 有多少个不同的值把具有不同值的元素的行列及值记录在一个小规模的数组中 从而缩小程序的规模如图 把一个 6X7 的二维数组变为了一个 9X3 的稀疏数组 其中二维数组转稀疏数组稀疏数组转二维数组先读取稀疏数组的第一行 保存二维数组的行列信息 还原二维数组读取稀疏数组的其他行 将值赋给二维数组的对应位置上的数

稀疏数组

处理方法

  • 第一行保存的是原二维数组的行、列以及非0值的个数
  • 第二到九行保存的是每个非0值所在的位置及其数值

转换思路

二维数组转稀疏数组

  • 遍历二维数组,得到二维数组中有效值的个数sum,创建稀疏数组,有sum+1行,3列(固定)
  • 将二维数组中的有效值存入稀疏数组中

稀疏数组转二维数组

代码

public class SparseArray { 
    public static void main(String[] args) { 
    // 先定义一个二维数组 int[][] arr = new int[11][11]; // 随机在二维数组中插入几个非零的数 arr[0][3] = 31; arr[2][6] = 9; arr[5][8] = 65; arr[6][9] = 96; arr[4][1] = -1; arr[8][0] = 2; arr[10][1] = 101; // 循环遍历打印 for (int i = 0; i < arr.length; i++) { 
    for (int j = 0; j < arr[i].length; j++) { 
    System.out.print(arr[i][j]+ " "); } System.out.println(); } // 获取二维数组中非零的个数 int sum = 0; for (int i = 0; i < arr.length; i++) { 
    for (int j = 0; j < arr[i].length; j++) { 
    if (arr[i][j]!=0){ 
    sum++; } } } System.out.println(sum); // 打印得到7个非零的数 / * 稀疏数组固定三列 行数不确定,行数 = 非零的个数+1 * 为什么要+1呢? 因为第一行固定的是你要稀疏的二维数组的维度 */ int sparse [][] = new int[sum+1][3]; sparse[0][0] = arr.length; sparse[0][1] = arr[0].length; sparse[0][2] = sum; // 定义一个count,来控制行号,从第二行开始,因为他的列索引的值已经固定好了。 int count = 1; for (int i = 0; i < arr.length; i++) { 
    for (int j = 0; j < arr[i].length; j++) { 
    if (arr[i][j]!=0){ 
    sparse[count][0] =i; sparse[count][1] =j; sparse[count][2] = arr[i][j]; count ++; } } } for (int i = 0; i < sparse.length; i++) { 
    for (int j = 0; j < sparse[i].length; j++) { 
    System.out.print(sparse[i][j]+" "); } System.out.println(""); } / * 稀疏数组转为二维数组 * 先定义好维度,稀疏数组[0][0]是二维数组的行数,稀疏数组[0][1]是二维数组的列数! */ int[][] newArr = new int[sparse[0][0]][sparse[0][1]]; // 遍历稀疏数组,将不为零的坐标还原到二维数组上 for (int i = 1; i < sparse.length ; i++) { 
    newArr[sparse[i][0]][sparse[i][1]] = sparse[i][2]; } // 遍历打印 for (int i = 0; i < newArr.length; i++) { 
    for (int j = 0; j < newArr[i].length; j++) { 
    System.out.print(newArr[i][j]+" "); } System.out.println(""); } } } 

运行的结果

原二维数组 0 0 0 31 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 9 0 0 0 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 0 0 0 0 0 0 65 0 0 0 0 0 0 0 0 0 0 0 96 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 101 0 0 0 0 0 0 0 0 0 转为的稀疏数组 7 11 11 7 0 3 31 2 6 9 4 1 -1 5 8 65 6 9 96 8 0 2 10 1 101 稀疏数组转化得到的二维数组 0 0 0 31 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 9 0 0 0 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 0 0 0 0 0 0 65 0 0 0 0 0 0 0 0 0 0 0 96 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 101 0 0 0 0 0 0 0 0 0 
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/226949.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月16日 下午10:18
下一篇 2026年3月16日 下午10:18


相关推荐

  • 已知圆心及半径,通过MATLAB画圆「建议收藏」

    已知圆心及半径,通过MATLAB画圆「建议收藏」已知圆心及半径,使用MATLAB画圆文章目录已知圆心及半径,使用MATLAB画圆一、原理简介二、转换过程三、结果展示一、原理简介条件中已知圆的半径可以等价于极坐标系中的ρ,所以能根据已知的半径转换为直角坐标系中点的坐标来画圆。转换的原理是使用极坐标与直角坐标之间的转换公式来实现,公式如下:x=ρcosθy=ρsinθ二、转换过程主要分一下几步完成1.设置圆的一周由多少个点组成;2.设置圆周上点与点之间的间隔角度;3.设置圆心的坐标;4.读取半径值;5.求取X、Y轴坐标;6.画

    2022年6月19日
    42
  • C语言文件

    C语言文件

    2021年10月6日
    36
  • Sizzle引擎分析

    Sizzle引擎分析Sizzle 引擎 是啥 不懂 用过 jQuery 不 没错 JQ 的核心就是这个 话不多说 开始分析一 Sizzle 构造器在 jquery fn init 构造器函数中 通过调用 jQuery context find selector 函数来解析并匹配 DOM 元素 jQuery find 函数实际上是引用 Sizzle 函数 而 Sizzle 函数仅是 Sizzle 引擎的构造器

    2026年2月17日
    2
  • 性能优化之YUICompressor压缩JS、CSS

    性能优化之YUICompressor压缩JS、CSS性能一直是项目中比较重要的一点,尤其门户网站,对页面的响应要求是很高的,从性能角度上来讲,对于Web端的优化其中重要的一点无疑是JS、CSS文件压缩,图片的融合,尽量减小文件的大小,必免占加载时占用过多的带宽。yuicompressor无疑是一个比较好的压缩工具,是yahoo的一个开源组件,下面介绍yuicompressor压缩JS、CSS文件,及在项目中的使用yuicmpressor的使用1、首先

    2022年7月18日
    23
  • 在线问诊小程序源码_诊前服务

    在线问诊小程序源码_诊前服务专家门诊——JSP开发答疑200问[华储网推荐]    

    2022年8月31日
    5
  • Redis创建高可用集群教程【Windows环境】

    模仿的过程中,加入自己的思考和理解,也会有进步和收获。在这个互联网时代,在高并发和高流量可能随时爆发的情况下,单机版的系统或者单机版的应用已经无法生存,越来越多的应用开始支持集群,支持分布式部署了。而Redis作为缓存服务器的比较出色的一员,它在出生的时候就被设置支持集群,本篇就是介绍Redis集群的介绍和搭建过程!使用的平台是Windows,搭建的思路和Linux上基本一致! 墙…

    2022年2月27日
    43

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号