稀疏数组

概念

用来处理 具有 较多相同元素 的数组:(压缩数组)

  • 稀疏数组共 3列,n+1行(n为原数组有效元素个数) new int[n+1][3]
  • 第一行记录 元素组共有几行几列,共有多少个有效元素
  • 后面n行 则分别记录 有效元素元素的 行,列,值

image

数组转换

二维数组转稀疏数组:

  1. 遍历原始二维数组,得到有效元素个数sum,行,列
  2. 根据sum创建 稀疏数组 sparseArr int[sum+1][3]
  3. 遍历二维数组,将有效元素 存入到稀疏数组
点击查看代码
//转为稀疏数组 n+1行,3列
/*第一行记录原始数组的  行,列,有效元素个数n */
public static int[][] toSparseArr(int[][] arr){
    //1.遍历原始数组,记录有效元素个数
    int n=0;
    for (int i = 0; i < arr.length; i++) {
        for (int j = 0; j < arr[i].length; j++) {
            if (arr[i][j]!=0){
                n++;
            }
        }
    }
    //2.创建稀疏数组  【行,列,value】
    int[][] sparseArr = new int[n+1][3];
    //3.给稀疏数组赋值 ,第一行为总数组的行,列,有效元素个数
    sparseArr[0][0] = arr.length;
    sparseArr[0][1] = arr[0].length;
    sparseArr[0][2] = n;
    //遍历 有效元素,赋值给稀疏数组
    n=1;
    for (int i = 0; i < arr.length; i++) {
        for (int j = 0; j < arr[i].length; j++) {
            if (arr[i][j]!=0){
                sparseArr[n][0] = i;//行
                sparseArr[n][1] = j;//列
                sparseArr[n][2] = arr[i][j];//value
                n++;   //记得n++,进入下一行赋值
            }
        }
    }
    return sparseArr;
}

稀疏数组转二维数组

  1. 先读取稀疏数组的第一行,从而创建原始数组
  2. 再读取稀疏数组的后几行,并赋值给原始数组
点击查看代码
//稀疏数组 转原二维数组
/*遍历第一行获得原始数组大小,创建原始数组,
  遍历后续行,获得元素位置与value */
public static int[][] sparseArrToArr(int[][] sparseArr){
    int row = sparseArr[0][0];  //行数
    int col = sparseArr[0][1];  //列数
    int[][] arr = new int[row][col];
    //遍历后续行,给元素赋值
    for (int i = 1; i < sparseArr.length; i++) {
        row = sparseArr[i][0];
        col = sparseArr[i][1];
        arr[row][col] = sparseArr[i][2]; //获得对于位置value
    }
    return arr;
}
posted @ 2022-02-05 16:58  simp1e1  阅读(35)  评论(0)    收藏  举报