037 稀疏数组

037 稀疏数组_第1张图片

代码示例 

/**
 * 生成稀疏数组
 * @param arr 原数组
 * @param defaultValue 数组默认值
 * @return
 */
static int[][] extractArray(int[][] arr, int defaultValue) {
    // 统计有多少个非默认值
    int count = 0;
    for (int i = 0; i < arr.length; i++) {
        for (int j = 0; j < arr[i].length; j++) {
            if(arr[i][j] != defaultValue){
                count++;
            }
        }
    }
    // 声明稀疏数组
    int[][] sparseArr = new int[count + 1][3];
    sparseArr[0][0] = arr.length;
    sparseArr[0][1] = arr[0].length;
    sparseArr[0][2] = count;
    // 向稀疏数组填入数据
    int index = 1;
    for (int i = 0; i < arr.length; i++) {
        for (int j = 0; j < arr[i].length; j++) {
            if(arr[i][j] != defaultValue){
                sparseArr[index][0] = i;
                sparseArr[index][1] = j;
                sparseArr[index][2] = arr[i][j];
                index++;
            }
        }
    }
    return sparseArr;
}

/**
 * 稀疏数组还原为二维数组
 * @param arr 稀疏数组
 * @return
 */
static int[][] sparseDilution(int[][] arr, int defaultValue) {
    int[][] dilutionArr = new int[arr[0][0]][arr[0][1]];
    // 先填充好默认值
    for (int i = 0; i < dilutionArr.length; i++) {
        for (int j = 0; j < dilutionArr[i].length; j++) {
            dilutionArr[i][j] = defaultValue;
        }
    }
    // 再解析出非默认值的坐标,覆盖值
    for (int i = 1; i < arr.length; i++) {
        dilutionArr[arr[i][0]][arr[i][1]] = arr[i][2];
    }
    return dilutionArr;
}

/**
 * 打印二维数组
 * @param arr 二维数组
 */
static void printArray(int[][] arr){
    for (int[] ints : arr) {
        for (int anInt : ints) {
            System.out.print("\t" + anInt);
        }
        System.out.println();
    }
}

public static void main(String[] args) {
    // 定义原数组,五子棋盘15×15 0空1黑2白
    int[][] arr = new int[15][15];
    arr[7][7] = 1;
    arr[7][8] = 1;
    arr[8][8] = 2;
    arr[9][9] = 2;
    // 输出原数组
    System.out.println("原数组为:");
    printArray(arr);
    // 调用方法,生成稀疏数组
    int[][] sparseArr = extractArray(arr, 0);
    // 输出稀疏数组
    System.out.println("稀疏数组为:");
    printArray(sparseArr);
    // 调用方法,将稀疏数组还原为原数组
    int[][] dilutionArr = sparseDilution(sparseArr, 0);
    // 输出还原数组
    System.out.println("还原数组为:");
    printArray(dilutionArr);
}

你可能感兴趣的:(JavaSE,算法,java)