首页 > 其他分享 >二维数组之稀疏数组

二维数组之稀疏数组

时间:2022-11-15 10:58:06浏览次数:53  
标签:arr1 int args 二维 稀疏 ++ length 数组

  1 package com.Lucky.base;
  2 
  3 import java.util.Arrays;
  4 
  5 /**
  6  * 稀疏数组:记录有效数据
  7  */
  8 public class sparseArray {
  9     public static void main(String[] args) {
 10         ///案例:11*11的棋盘  数据保存方法
 11 
 12         //1.普通的二维数组
 13         int[][] arr1=new int[11][11];
 14         //将数据放进数组中   0代表空白   1代表白棋子  2代表黑棋子
 15         //白棋数据
 16         arr1[5][6]=1;
 17         arr1[2][6]=1;
 18         arr1[5][9]=1;
 19         arr1[4][4]=1;
 20         //黑棋数据
 21         arr1[1][7]=2;
 22         arr1[2][2]=2;
 23         arr1[3][9]=2;
 24         arr1[7][7]=2;
 25 //效果图: 占据内存太大【要优化】
 26         /*
 27             0    0    0    0    0    0    0    0    0    0    0
 28             0    0    0    0    0    0    0    2    0    0    0
 29             0    0    2    0    0    0    1    0    0    0    0
 30             0    0    0    0    0    0    0    0    0    2    0
 31             0    0    0    0    1    0    0    0    0    0    0
 32             0    0    0    0    0    0    1    0    0    1    0
 33             0    0    0    0    0    0    0    0    0    0    0
 34             0    0    0    0    0    0    0    2    0    0    0
 35             0    0    0    0    0    0    0    0    0    0    0
 36             0    0    0    0    0    0    0    0    0    0    0
 37             0    0    0    0    0    0    0    0    0    0    0
 38          */
 39         //打印普通数组
 40         System.out.println("==============打印普通数组==============");
 41         printArr(arr1);
 42         System.out.println("==============打印稀释数组==============");
 43         printArrOut(sparseArr(arr1));
 44         System.out.println("==============转换稀释数组成普通数组==============");
 45         printArrOut(caseToArr(sparseArr(arr1)));
 46 
 47 
 48     }
 49 
 50 
 51 
 52     //2.将二维数组转换成稀疏数组
 53     //效果图:
 54         /*
 55              行    列    有效值
 56              11   11     8
 57         [0]   1    7     2
 58         [1]   2    2     2
 59         [2]   3    9     2
 60         [3]   7    7     2
 61         [4]   2    6     1
 62         [5]   4    4     1
 63         [6]   5    6     1
 64         [7]   5    9     1
 65 
 66          */
 67 
 68 
 69     /**
 70      * 思路:1.获取原来二位数组的行和列
 71      *      2.获取有效值个数[黑白棋的总和]
 72      *      3.创建新的二维数组  行的长度row=有效值+1
 73      *                       列的长度col=3
 74      *      4.在第一行开始填充数据头部
 75      *      5.在第二行开始填充数据
 76      */
 77 
 78      public static int[][] sparseArr(int[][] args){
 79         // 1.获取原来二位数组的行和列
 80          int row=args.length;
 81          int col=args[0].length;
 82 
 83         // 2.获取有效值个数[黑白棋的总和]
 84          int sum=0;    //黑白棋的总和
 85          for (int i = 0; i < args.length; i++) {
 86              for (int j = 0; j < args.length; j++) {
 87                     //进入二维数组内部
 88                  if(args[i][j]!=0){
 89                      sum++;    //如果是有效值,sum数量递增
 90                  }
 91              }
 92          }
 93 
 94          //3.创建新的二维数组  行的长度row=有效值+1
 95           //                列的长度col=3
 96          int[][] newArr=new int[sum+1][3];
 97 
 98         // 4.在第一行开始填充数据头部
 99          newArr[0][0]=row;
100          newArr[0][1]=col;
101          newArr[0][2]=sum;
102 
103         // 5.在第二行开始填充数据
104          int index=1;   //定义要填充数据的行数【第二行开始】
105          for (int i = 0; i < args.length; i++) {
106              for (int j = 0; j < args.length; j++) {
107                if(args[i][j]!=0){
108                    newArr[index][0]=i;
109                    newArr[index][1]=j;
110                    newArr[index][2]=args[i][j];
111 
112                    index++;
113                }
114              }
115          }
116          return newArr;
117      }
118 
119     /**
120      * 将稀疏数组转换成普通数组
121      * @param args
122      * @return
123      */
124     public static int[][] caseToArr(int[][] args){
125         // 1.获取原来稀疏数组的行和列
126             int[] frist=args[0];   //获取稀疏数组中的第一行【第一行存在原来数组的行数和列数以及有效个数】
127 
128         int row=frist[0];        //稀疏数组中的[0][0]是原来数组的行数
129         int col=frist[1];        //稀疏数组中的[0][1]是原来数组的列数
130 
131         //创建新数组
132         int[][] newVar=new int[row][col];
133         for (int i = 1; i < args.length; i++) { //args.length=frist[2]+1
134             int[] sparseRow = args[i];
135             ///  sparseRow:稀疏数组的行的所有数据: 例如:[1,7,2]
136             //sparseRow[0]=  1
137             //sparseRow[1]=  7
138             //sparseRow[2]=  2
139             newVar[sparseRow[0]][sparseRow[1]] = sparseRow[2];  //在指定位置进行赋值操作
140 
141             //也可以这样:
142             // newVar[args[i][0]][args[i][1]] = args[i][2];
143         }
144         return newVar;
145     }
146 
147     //将稀疏数组转换成二维数组
148 
149 
150     /**
151      * 打印二维数祖方法:
152      * @param sd
153      */
154     public static void printArr(int[][] sd){
155 
156         for (int i = 0; i < sd.length; i++) {
157             for (int j = 0; j < sd.length; j++) {
158                 System.out.print(sd[i][j]+"\t");
159 
160             }
161             System.out.println();
162 
163         }
164     }
165 
166 
167     /**
168      * 打印稀释数组方法
169      */
170     public static void printArrOut(int[][] sd){
171 
172         for (int i = 0; i < sd.length; i++) {
173             for (int j = 0; j < sd[0].length; j++) {
174                 System.out.print(sd[i][j]+"\t");
175 
176             }
177             System.out.println();
178 
179         }
180     }
181 }

 

标签:arr1,int,args,二维,稀疏,++,length,数组
From: https://www.cnblogs.com/Lucky-only/p/16891646.html

相关文章

  • 二维前缀和
    ```#include<bits/stdc++.h>usingnamespacestd;intn,m,K,cnt;inta[510][510],f[510][510];intmain(){ cin>>n>>m>>K; for(inti=1;i<=n;i++) { for(intj=1;j<=m;j+......
  • 74.数组map能干什么,会改变原数组吗
    map是处理数据的方法,不会改变原数组,会返回一个新数组;filter也不会改变原数组,会返回新数组;forEach也不会改变原数组,不会返回新数组;reduce不会改变原数组; 是否改......
  • 指针与数组的区别
    内存分配方式有三种:(1)从静态存储区域分配。例如全局变量,static变量,常量字符串。(2)在栈上创建。函数内局部变量的存储单元都可以在栈上创建(3)从堆上分配,亦称动态内存分配。用m......
  • 72.怎么判断数组是数组
    1.使用instanceof  instanceof的作用就是判断该对象是谁的实例,我们也就知道了instanceof是对象运算符。2.静态方法Array.isArray方法 ;  ps:使用typeof......
  • 每日算法题之构建乘积数组
    JZ66构建乘积数组描述给定一个数组A[0,1,...,n-1],请构建一个数组B[0,1,...,n-1],其中B的元素B[i]=A[0]*A[1]*...*A[i-1]*A[i+1]*...*A[n-1](除A[i]以外的全部元......
  • 66.有没有碰到过数组响应丢失(问的是ref和reactive的用法,什么情况下用)
    由于vue3使用proxy,对于对象和数组都不能直接整个赋值。  直接赋值丢失了响应性只有push或者根据索引遍历赋值才可以保留reactive数组的响应性 ;可以使用toRefs解决......
  • 二维数组 不确定的元素
    importjava.util.Scanner;publicclassEext{ publicstaticvoidmain(String[]args){ //二维数组 int[][]arr=newint[3][];//只确定一维数组的个数 for......
  • php filter函数库 (与变量和类型有关的扩展),可以过滤常用邮件,IP,变量数组等...
     filter扩展库简介 Thisextensionfiltersdatabyeithervalidatingorsanitizingit.Thisisespeciallyusefulwhenthedatasourcecontainsunknown(orfore......
  • 力扣 240. 搜索二维矩阵 II
    240.搜索二维矩阵II编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target 。该矩阵具有以下特性:每行的元素从左到右升序排列。每列的元......
  • 数组循环移动mci
    #include<stdio.h>intmain(){ inta[10]={1,2,3,4,5,6,7,8,9,10}; intm=3; intn=sizeof(a)/4; inti; int*p; for(i=0;i<m;i++){ p=......