Skip to content

LeetCode Example

Convert 1D Array Into 2D Array

Let's take a look slightly more difficult task from LeetCode (biweekly-contest-62) which is to understand array structures.

Problem Statement:

You are given a 0-indexed 1-dimensional (1D) integer array original, and two integers, m and n. You are tasked with creating a 2-dimensional (2D) array with m rows and n columns using all the elements from original.

The elements from indices 0 to n - 1 (inclusive) of original should form the first row of the constructed 2D array, the elements from indices n to 2 * n - 1 (inclusive) should form the second row of the constructed 2D array, and so on.

Return an m x n 2D array constructed according to the above procedure, or an empty 2D array if it is impossible.

To solve this task, students need to

  • Familiar with 1D array manipulation.
  • Understand the concept of multidimensional arrays.
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
# Reference Solution from Instructor
public int[][] construct2DArray(int[] original, int m, int n) {
    if (original.length != m * n) {
        return new int[0][0];
    }

    int[][] result = new int[m][n];
    int index = 0;
    for (int i = 0; i < m; i++) {
        for (int j = 0; j < n; j++) {
            result[i][j] = original[index++];
        }
    }
    return result;
}
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
# ChatGPT-generated Solution (Incorrect)
public static int[][] construct2DArray(int[] original, int m, int n) {
    int[][] result = new int[m][n];
    for (int i = 0; i < result.length; i++) {
        for (int j = 0; j < result[i].length; j++) {
            if (i * result[0].length + j >= original.length) {
                return new int[0][0];
            } else {
                result[i][j] = original[i * result[0].length + j];
            }
        }
    }
    return result;
}

Fixing Patches from ITS Repair Engine:

  • add if (original.length != m * n) { return new int[0][0]; } in construct2DArray function.
  • remove if (i * result[0].length + j >= original.length) { return new int[0][0]; } else {} in construct2DArray function.

Final ITS Feedback:

  1. Misinterpretation of Requirement: The submission assumes that if the number of elements in the original array is less than m * n, it should return an empty 2D array. However, the requirement is that if it is impossible to construct an m x n 2D array using all the elements, it should return an empty array. This would happen if the length of original is not exactly equal to m * n.