java 二维数组与稀疏数组之间相互转换

╰+哭是因爲堅強的太久メ 2023-09-27 08:12 134阅读 0赞

一、什么是稀疏数组?

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

二、案例分析

在这里插入图片描述

三、代码实现

  1. package com.demo;
  2. public class SparseArray {
  3. public static void main(String[] args) {
  4. // 一个二维数组,11行11列
  5. int chessArrs[][] = new int[11][11];
  6. // 0:表示没有棋子,1:表示黑子 2:表示蓝子
  7. chessArrs[1][2] = 1;
  8. chessArrs[2][3] = 2;
  9. System.out.println("原始的二维数组...");
  10. for (int[] chessArr : chessArrs) {
  11. for (int data : chessArr) {
  12. System.out.printf("%d\t",data);
  13. }
  14. System.out.println();
  15. }
  16. // 二维数组转稀疏数组思路
  17. // 1、计算出二维数组中数字的个数
  18. int sum = 0;
  19. for (int i = 0; i < 11; i++) {
  20. for (int j = 0; j < 11; j++) {
  21. if(chessArrs[i][j] != 0){
  22. sum ++;
  23. }
  24. }
  25. }
  26. System.out.println("二维数组中sum =" + sum);
  27. // 2.根据第一步得到的值,创建稀疏数组,列是固定的为3;行
  28. /*
  29. 11 11 2
  30. 1 2 1
  31. 2 3 2
  32. */
  33. int sparseArr[][] = new int[sum+1][3];
  34. sparseArr[0][0] = 11;
  35. sparseArr[0][1] = 11;
  36. sparseArr[0][2] = sum;
  37. // 向稀疏数组存放值,需要遍历原始二维数组
  38. int count = 0;
  39. for (int i = 0; i < 11; i++) {
  40. for (int j = 0; j < 11; j++) {
  41. if(chessArrs[i][j] != 0){
  42. count++;
  43. sparseArr[count][0] = i;
  44. sparseArr[count][1] = j;
  45. sparseArr[count][2] = chessArrs[i][j];
  46. }
  47. }
  48. }
  49. System.out.println("输出稀疏数组的形式....");
  50. // 输出稀疏数组的形式
  51. for (int i = 0; i < sparseArr.length; i++) {
  52. System.out.printf("%d\t%d\t%d\t\n " , sparseArr[i][0],sparseArr[i][1],sparseArr[i][2]);
  53. }
  54. /**
  55. * 通过稀疏数组 -》二维数组
  56. * 思路:
  57. * 1、读取稀疏数组的第一行,创建二维数组
  58. * 2、遍历稀疏数组,给二维数组赋值
  59. */
  60. // 二维数组的行
  61. int m = sparseArr[0][0];
  62. // 二维数组的列数
  63. int n = sparseArr[0][1];
  64. // 创建二维数组
  65. int arr[][] = new int[m][n];
  66. // 2.给二维数组赋值,遍历稀疏数组,得到值在二维数组中的位置
  67. for (int i = 1; i < sparseArr.length; i++) {
  68. // 获取值在二维数组中的行所在位置
  69. int a = sparseArr[i][0];
  70. // 获取值在二维数组中的列所在位置
  71. int b = sparseArr[i][1];
  72. // 值
  73. int value = sparseArr[i][2];
  74. arr[a][b] = value;
  75. }
  76. // 3.遍历得到二维数组的形式
  77. for (int[] chessArr : arr) {
  78. for (int data : chessArr) {
  79. System.out.printf("%d\t",data);
  80. }
  81. System.out.println();
  82. }
  83. }
  84. }

发表评论

表情:
评论列表 (有 0 条评论,134人围观)

还没有评论,来说两句吧...

相关阅读