首页 > 其他分享 >稀疏数组

稀疏数组

时间:2024-01-03 13:24:05浏览次数:32  
标签:int array2 稀疏 System 数组 println out

问题介绍

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

 

分析问题:因为二维数组的很多值是默认值0,因此记录了很多没有意义的数据。

解决:稀疏数组

概念

当一个数组中大部分元素为0,或者为同一值的数组时,可以使用稀疏数组来保存该数组。

稀疏数组的处理方式是:

  • 记录数组一共有几行几列,有多少个不同值

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

如下图:左边是原始数组,右边是稀疏数组

 

快捷键

数组名称.for

 

会显示出这个

 

ints.for

 

会显示出这个

 

代码

//Java-零基础学习/src/array/Demo07
package array;

public class Demo07 {
   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 (int i = 0; i < 11; i++) {
           for (int j = 0; j < 11; j++) {
               if (array1[i][j] != 0) {
                   sum++;
              }
          }
      }
       System.out.println("有效值的个数:" + sum);

       //2.创建一个稀疏数组的数组
       int[][] array2 = new int[sum + 1][3];

       array2[0][0] = 11;
       array2[0][1] = 11;
       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][0] = i;
                   array2[count][1] = j;
                   array2[count][2] = array1[i][j];
              }

          }

      }

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

       for (int i = 0; i < array2.length; i++) {
           System.out.println(array2[i][0] + "\t"
                   + array2[i][1] + "\t"
                   + array2[i][2] + "\t");
      }

       System.out.println("=====================");
       System.out.println("还原");
       //1.读取稀疏数组
       int[][] array3 = new int[array2[0][0]][array2[0][1]];

       //2.给其中的元素还原它的值
       for (int i = 1; i < array2.length; i++) {
           array3[array2[i][0]][array2[i][1]] = array2[i][2];
      }

       //3.打印
       System.out.println("输出还原的数组");

       for (int[] ints : array1) {
           for (int anInt : ints) {
               System.out.print(anInt + "\t");
          }
           System.out.println();
      }

  }
}
 

标签:int,array2,稀疏,System,数组,println,out
From: https://www.cnblogs.com/poiuyjoey/p/17942956

相关文章

  • 【C++】STL 容器 - stack 堆栈容器 ① ( stack 堆栈容器特点 | stack 堆栈容器与 dequ
    文章目录一、stack堆栈容器简介1、stack堆栈容器引入2、stack堆栈容器特点3、stack堆栈容器与deque双端数组容器对比二、代码示例-stack堆栈容器简单示例1、代码示例2、执行结果一、stack堆栈容器简介1、stack堆栈容器引入C++语言中的STL标准模板库中的stac......
  • 数组指针的用法
    #define_CRT_SECURE_NO_WARNINGS1#include<stdio.h>//参数是数组形式voidprint1(intarr[3][5],intx,inty)//用数组形式接收,再接收传来的参数{ inti=0; intj=0; for(i=0;i<x;i++) { for(j=0;j<y;j++) { printf("%d",arr[i][j]);......
  • 数组指针
    数组指针是指针 用来存放数组的地址#define_CRT_SECURE_NO_WARNINGS1#include<stdio.h>intmain(){ //eg: //int*P=NULL;//p是整形指针-指向整型的指针-可以存放整型的地址 //char*pc=NULL;//pc是字符指针-指向字符的指针-可以存放字符的地址 //数组指针-指......
  • 指针数组
    指针数组是数组是用来存放指针的eg:指针数组用法#define_CRT_SECURE_NO_WARNINGS1#include<stdio.h>intmain(){ //int*parr[4];//存放整型指针的数组--指针数组 //char*pch[5];//存放字符指针的数组--指针数组 intarr1[5]={1,2,3,4,5}; intarr2[5]={2,3,4,5,6......
  • 在 PHP 数组中的两个字符串之间切换
    在PHP中,你可以使用array_flip()函数和条件语句来在数组中的两个字符串之间进行切换。以下是一个示例://创建一个数组,包含两个字符串的映射关系$mapping=array('string1'=>'value1','string2'=>'value2');//定义当前需要切换的字符串$currentString='stri......
  • 代码随想录 小结01 数组
    数组篇一共有五个题目第一题二分查找值得注意的是,要自己想好区间的边界到底是写左闭右开还是左闭右闭根据边界不同while的条件和左右指针的移动会有差别目前我的习惯是写左闭右开还是固定一下习惯比较好第二题是实现数组类的erase()使用快慢指针可以做到在数组原地进......
  • JavaScript圆形转多边形经纬度数组算法及示例
    前言在地理信息系统(GIS)和地图应用中,有时需要将圆形区域表示为多边形的经纬度数组对象。本文将介绍如何使用JavaScript实现圆形转多边形经纬度数组的算法,并提供一个示例来演示其用法。概述圆形转多边形经纬度数组的算法的目标是将给定的圆形区域表示为多边形的经纬度数组对象。这......
  • Go 语言为什么很少使用数组?
    大家好,我是frank,「Golang语言开发栈」公众号作者。01介绍在Go语言中,数组是一块连续的内存,数组不可以扩容,数组在作为参数传递时,属于值传递。数组的长度和类型共同决定数组的类型,不同类型的数组之间不可以比较,否则在编译时会报错。因为数组的一些特性,我们在Go项目开发中,很少使......
  • Go 语言为什么很少使用数组?
    大家好,我是frank,「Golang语言开发栈」公众号作者。01介绍在Go语言中,数组是一块连续的内存,数组不可以扩容,数组在作为参数传递时,属于值传递。数组的长度和类型共同决定数组的类型,不同类型的数组之间不可以比较,否则在编译时会报错。因为数组的一些特性,我们在Go项目开发中,......
  • 稀疏自编码与深度学习的结合
    1.背景介绍稀疏自编码(SparseAutoencoding)是一种深度学习技术,它主要用于处理稀疏数据,如文本、图像等。稀疏自编码的核心思想是将稀疏数据映射到低维的编码空间,从而减少数据的维度并提高计算效率。在深度学习领域,稀疏自编码被广泛应用于图像压缩、文本摘要生成、语音识别等任务。在......