DiverseArray is #1 from the from the 2015 AP Computer Science A Free Response problems.


Part (a) arraySum method

public static int arraySum(int[] arr)
    int sum = 0;

    for(int value : arr)
        sum += value;

    return sum;

On the free response, when in doubt, use a regular loop (for or while). See Enhanced for loop exercises for information on when enhanced for loops are appropriate, and to practice with them.

Part (b) rowSums method

public static int[] rowSums(int[][] arr2D)
    int[] sums = new int[arr2D.length];

    for(int i = 0; i < sums.length; i++)
        sums[i] = arraySum(arr2D[i]);

    return sums;

The problem requires that rowSums call arraySum so the 2D array arr2D must be treated as an array of 1D arrays. arr2D[i] stores a reference to the 1D array representing row i of arr2D. See Treating a 2D array as an array of 1D arrays for additional details.

A regular for loop is appropriate here since the index is needed for both sums and arr2D.

Part (c) isDiverse method

public static boolean isDiverse(int[][] arr2D)
    int[] sums = rowSums(arr2D);

    for(int i = 0; i < sums.length; i++)
        for(int j = i + 1; j < sums.length; j++)
            if(sums[i] == sums[j])
                return false;

    return true;

I’m not usually a proponent of using nested loops to traverse a 1D array; however, they are a simple solution here. An alternative solution is to sort sums (not arr2D) then check for adjacent duplicate values. A Map could also be used; however, that is outside the scope of AP CS A.

2015 AP CS Exam Free Response Solutions

Additional 2D array resources

Help & comments

Get help from AP CS Tutor Brandon Horn

Comment on DiverseArray