1、稀疏数组

image.png
image.png

  1. public class SparseArray {
  2. public static void main(String[] args) {
  3. int[][] arr={{0,0,0,22,0,0,15},{0,11,0,0,0,17,0},{0,0,0,-6,0,0,0},
  4. {0,0,0,0,0,39,0},{91,0,0,0,0,0,0},{0,0,28,0,0,0,0}};
  5. // printArray(arr);
  6. int[][] res = arrayToSparse(arr);
  7. printArray(res);
  8. int[][] array = sparseToArray(res);
  9. printArray(array);
  10. }
  11. //输出二维数组
  12. public static void printArray(int[][] arr){
  13. int row=arr.length;
  14. int col=arr[0].length;
  15. if(row==0||col==0){
  16. return;
  17. }
  18. for(int i=0;i<row;i++){
  19. for(int j=0;j<col;j++){
  20. System.out.print(arr[i][j]);
  21. System.out.print(" ");
  22. }
  23. System.out.println();
  24. }
  25. }
  26. //二维数组转化稀疏数组
  27. public static int[][] arrayToSparse(int[][] arr){
  28. int row=arr.length;
  29. int col=arr[0].length;
  30. int sum=0;
  31. if(row==0||col==0){
  32. return null;
  33. }
  34. for(int i=0;i<row;i++){
  35. for(int j=0;j<col;j++){
  36. if(arr[i][j]!=0){
  37. sum++;
  38. }
  39. }
  40. }
  41. //初始化数组
  42. int[][] array=new int[sum+1][3];
  43. array[0][0]=row;
  44. array[0][1]=col;
  45. array[0][2]=sum;
  46. int temp=0;
  47. for(int i=0;i<row;i++){
  48. for(int j=0;j<col;j++){
  49. if(arr[i][j]!=0){
  50. temp++;
  51. array[temp][0]=i;
  52. array[temp][1]=j;
  53. array[temp][2]=arr[i][j];
  54. }
  55. }
  56. }
  57. return array;
  58. }
  59. //稀疏数组转化二维数组
  60. public static int[][] sparseToArray(int[][] arr){
  61. if(arr.length==0||arr[0].length==0){
  62. return null;
  63. }
  64. int row=0;
  65. int col=0;
  66. int temp=0;
  67. int[][] array=new int[arr[0][0]][arr[0][1]];
  68. for(int i=1;i<arr.length;i++){
  69. for(int j=0;j<arr[0].length;j++){
  70. if(j==0) {
  71. row = arr[i][j];
  72. }
  73. if(j==1){
  74. col=arr[i][j];
  75. }
  76. if(j==2){
  77. temp=arr[i][j];
  78. }
  79. }
  80. array[row][col]=temp;
  81. }
  82. return array;
  83. }
  84. }