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

稀疏数组

时间:2023-01-03 16:22:16浏览次数:30  
标签:int array2 稀疏 System 数组 out

稀疏数组

稀疏数组是一种数据结构。

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

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

解决:稀疏数组

稀疏数组介绍

当一个数组中大部分元素为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 (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 : array3) {
      for (int anInt : ints) {
          System.out.print(anInt+"\t");
      }
      System.out.println();
  }
}

//输出结果
输出原始的数组
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 2 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
====================
有效值的个数:2
稀疏数组
11 11 2
1 2 1
2 3 2
====================
还原
输出还原的数组
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 2 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

Process finished with exit code 0

每日Java面试题

一、什么是Java反射机制?

Java的反射(reflection)机制是指在程序的运行状态中,可以构造任意一个类的对象,可以了解任意一个对象所属的类,可以了解任意一个类的成员变量和方法,可以调用任意一个对象的属性和方法。这种动态获取程序信息以及动态调用对象的功能称为Java语言的反射机制。反射被视为动态语言的关键。

二、举例什么地方用到反射机制?

1.JDBC中,利用反射动态加载了数据库驱动程序。

2.Web服务器中利用反射调用了Sevlet的服务方法。

3.Eclispe等开发工具利用反射动态刨析对象的类型与结构,动态提示对象的属性和方法。

4.很多框架都用到反射机制,注入属性,调用方法,如Spring。

三、Java反射机制的作用

  • 在运行时判定任意一个对象所属的类

  • 在运行时构造任意一个类的对象

  • 在运行时判定任意一个类所具有的成员变量和方法;

  • 在运行时调用任意一个对象的方法

  • 生成动态代理

标签:int,array2,稀疏,System,数组,out
From: https://www.cnblogs.com/cuijiuba/p/17022580.html

相关文章

  • js 数组方法
    //定义一个数组varfruits=['香蕉','芒果','橘子','荔枝','樱桃'];//添加元素到数组的末尾,改变原数组varnewLength=fruits.push('香橙');//console.l......
  • 算法刷题 Day 6 | 242.有效的字母异位词 349. 两个数组的交集 202. 快乐数 1. 两数之
    哈希表理论基础建议:大家要了解哈希表的内部实现原理,哈希函数,哈希碰撞,以及常见哈希表的区别,数组,set和map。什么时候想到用哈希法,当我们遇到了要快速判断一个元素是......
  • Js中的数组去重
    1. functionunique(arr){returnArray.from(newSet(arr))}2.[...newSet(arr)]3.functionunique(arr){vararray=arr;varlen=......
  • 剑指offer——旋转数组的最小数字(三种方法)
    题目描述输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。思路三种方法:1、自己写的方法正数:​​n>>1​​​移位,然后​​n&1​​判断是否为1。负数:​​n>>1​......
  • 【LeetCode周赛-312】子数组按位与最大值、并查集(图)
    周赛链接:​​​https://leetcode.cn/contest/weekly-contest-312/​​A.2418.按身高排序题目描述:给你一个字符串数组names,和一个由互不相同的正整数组成的数组heig......
  • go+mongodb更新数组对象语法UpdateOptions
    UpdateOptions语法更新mongodb数组中符合条件的对象1.定义条件(elem可自定义)interfaceArr:=make([]interface{},0)interfaceArr=append(interfaceArr,bson.m{"elem.id":"11......
  • 对象属性数据转为数组内对象的不同属性值
    最近写项目有一个需求,根据连接参数获取不同的信息,而且参数还不止一个。原本最开始的想法是重复调用接口,但不太行,只能给接口传数组类型的参数了。这是最开始的写法,但代码......
  • 数组中的元素排序和去重总结
    一、使用List来操作publicclassArraySort{publicstaticvoidmain(String[]args){//定义一个数组Integer[]str={1,3,66,4,78,55,9,4,3,99};//将数......
  • 数组的排序
    一、选择排序图例:选择排序我们可以将它看做是"大圈套小圈代码:classArraySort{publicstaticvoidsort(intarr[]){for(inti=0;i<arr.length......
  • 定义数组
    array_name=(ele1ele2ele3...elen)Shell数组:Shell数组定义以及获取数组元素(biancheng.net)Shell数组-Shell数组如何定义与使用-嗨客网(haicoder.net)......