首页 > 编程语言 >Java 稀疏数组

Java 稀疏数组

时间:2023-04-01 11:44:06浏览次数:44  
标签:Java int array2 array1 稀疏 System 数组 out

稀疏数组

  • 当一个数组中大部分元素为0时,或者为同一值的数组时,可以使用稀疏数组来保存该数组。
  • 稀疏数组的处理方式是:
    • 记录数组一共有几行几列,有多少个不同值
    • 把具有不同值的元素和行列及值记录在一个小规模的数组中,从而缩小程序的规模

稀疏数组的简单应用 - 高杰的博客

下面对该原始数组进行压缩,求出其稀疏数组:

public static void main(String[] args) {
        //1. 创建一个二维数组 11*11   0:没有棋子  1:黑棋   2:白棋
        int[][] array1 = new int[11][11];
        array1[1][2] = 1;//对原始数组进行初始化
        array1[2][3] = 2;

        //输出原始数组
        System.out.println("输出原始的数组");

        //利用两次循环对数组进行遍历
        for (int[] ints : array1) {
            for (int anInt: ints) {
                System.out.print(anInt+"\t");
            }
            System.out.println();
        }
        System.out.println("=================");

        //输出稀疏数组

        //定义临时变量
        int sum = 0;

        //for循环遍历原始数组,找出不为零的数,并计算其个数
        for (int i = 0; i < array1.length; i++) {
            for (int j = 0; j < array1[i].length; j++) {
                if (array1[i][j]!=0){
                    sum++;
            }
        }
            }
        System.out.println("有效个数的值:"+sum);

        //对稀疏数组进行初始化定义
        int[][] array2 = new int[sum+1][3];//稀疏数组第 0 行是要记录原始数组的行列数,和有效值个数。有效值的坐标是从第 1 行开始记录的,所以行数要 +1,而稀疏数组的列数是固定为 3 的
        array2[0][0] = array1.length;//记录原始数组的行数
        array2[0][1] = array1[0].length;//记录原始数组的列数
        array2[0][2] = sum;//有效值个数

        int count = 0;
        //对原始数组进行遍历,获得有效值的坐标,并填充进稀疏数组中
        for (int i = 0; i < array1.length; i++) {
            for (int j = 0; j < array1[i].length; j++) {
                if (array1[i][j]!=0){
                    count++;
                    array2[count][2] = array1[i][j];
                    array2[count][1] = j;
                    array2[count][0] = i;
                    }
            }
        }

        System.out.println("稀疏数组");

        //遍历打印稀疏数组
        for (int[] ints:array2) {
            for (int anInt:ints) {
                System.out.print(anInt+"\t");
            }
            System.out.println();
        }
        System.out.println("=================");
        
        //稀疏数组转化为原始数组输出
        System.out.println("稀疏数组转换为原始数组");
        
        //初始化原始数组
        int[][] array3 = new int[array2[0][0]][array2[0][1]];

        //遍历稀疏数组,获取有效值原坐标,填充回原始数组
        for (int i = 1; i < array2.length; i++) {//稀疏数组第 1 行才开始记录有效值的坐标,所以要从第 1 行开始遍历
           array3[array2[i][0]][array2[i][1]]=array2[i][2];
           }

        System.out.println("原始数组");
        for (int[] ints:array3) {
            for (int anInt:ints) {
                System.out.print(anInt+"\t");
            }
            System.out.println();
        }
        }

标签:Java,int,array2,array1,稀疏,System,数组,out
From: https://www.cnblogs.com/huang-lin/p/17278330.html

相关文章

  • java方法- 冒泡排序
    冒泡排序冒泡排序是最为出名的排序之一,总共有八大排序冒泡的代码是两层循环,外层冒泡轮数,里层依次比较算法时间复杂度为O(n2)优化优化方法之一 ......
  • Java 基础 -- NIO 多人聊天室
    packagecom.atguigu.nio.groupchat;importjava.io.IOException;importjava.net.InetSocketAddress;importjava.nio.ByteBuffer;importjava.nio.channels.*;importjava.util.Iterator;publicclassGroupChatServer{//定义属性privateSelectorselector......
  • java方法-Arrays类
    Arrays类数组的工具类java.util.Arrays由于数组对象本身并没有什么方法可以供我们调用,但API中提供了一个工具类Arrays供我们使用,从而可以对数据对象进行一些基本的操作查看JDK帮助文档Arrays类中的方法都是static修饰的静态方法,在使用的时候可以直接使用类名进行调用,......
  • 装饰设计模式-java
      packagecn.shuishandt.opp;publicclassDecorateTest2{publicstaticvoidmain(String[]args){ Coffecoffe=newCoffe(); System.out.println(coffe.cost()+"=============>"+coffe.info()); Milkmilk=newMilk(coffe);......
  • java高精度定位系统源码 工厂人员定位系统源码
    这是一套java定位系统源码,工厂人员定位系统源码,UWB高精度定位系统源码,前后端分离架构,源码有演示。工厂人员定位系统,高精度的位置数据作为智能工厂数据流的重要组成部分,可实现对工厂内的人,车、物的精确定位,无缝追踪,智能调配与高效协同,可大幅提升工厂的精益生产及精细化管理水平,我们......
  • JavaScript
    大致路径学习JavaScript的路径可以大致分为以下几个方向:HTML和CSS:在学习JavaScript之前,您需要先掌握HTML和CSS基础知识,这是构建网页的基础。JavaScript基础:学习JavaScript的基本语法、变量和数据类型、运算符、条件语句、循环语句等。DOM编程:学习如何通过Ja......
  • 【LBLD】小而美的算法技巧:前缀和数组
    【LBLD】小而美的算法技巧:前缀和数组一维数组中的前缀和classNumArray{private:vector<int>preSum;public:NumArray(vector<int>&nums){preSum.push_back(0);for(inti=1;i<nums.size()+1;i++){preSum.push_back(......
  • 一维数组内存分析
    Java虚拟机的内存划分为了提高运算效率,就对空间进行了不同区域的划分,因为每一片区域都有特定的处理数据方式和内存管理方式。区域名称作用虚拟机栈用于存储正在执行的每个Java方法的局部变量表等。局部变量表存放了编译期可知长度<br/>的各种基本数据类型、对......
  • 万恶的环境 二 java
    可恶的环境奇奇怪怪的问题目录可恶的环境问题描述原因总结问题描述配置java开发环境一直在报错原因两个问题1.你的java环境太多,配置了不同的java环境变量导致无法进行build2.在配置java环境时,需要配置jdk,而不是jrejdk是开发时需要部署的jre是运行时部署的下面一个是jre......
  • 渡一教育_Java每日一练:建立Statement的作用是什么、前端Console.log( Boolean(‘‘))
    系列文章目录文章目录系列文章目录题目1java部分建立Statement的作用是什么(答案在最后公布)题目1-答案==解析====答案==题目2前端js部分==答案==题目3前端js部分如下代码输出的是什么答案和解析如下==解析==题目4如果希望1监听TCP端口为9000,服务端应该怎样创建socket题目答......