6.4

Array Algorithms

AP Computer Science A

1. Sum and Average

java
int[] scores = {85, 92, 78, 96, 88};
int sum = 0;

for (int score : scores) {
    sum += score;
}

double average = (double) sum / scores.length;
System.out.println("Sum: " + sum);          // Sum: 439
System.out.println("Average: " + average);   // Average: 87.8

2. Finding Maximum and Minimum

java
int[] temps = {72, 68, 85, 59, 77, 91, 63};

int max = temps[0];
int min = temps[0];

for (int i = 1; i < temps.length; i++) {
    if (temps[i] > max) {
        max = temps[i];
    }
    if (temps[i] < min) {
        min = temps[i];
    }
}

System.out.println("High: " + max);  // High: 91
System.out.println("Low: " + min);   // Low: 59

Trace for max

3. Linear Search

java
public static int search(int[] arr, int target) {
    for (int i = 0; i < arr.length; i++) {
        if (arr[i] == target) {
            return i;  // found — return the index
        }
    }
    return -1;  // not found
}
java
int[] ids = {1001, 1042, 1015, 1078, 1023};
int pos = search(ids, 1015);
System.out.println(pos);  // 2

int missing = search(ids, 9999);
System.out.println(missing);  // -1

4. Counting Matches

java
int[] grades = {92, 65, 78, 88, 55, 91, 73, 60};
int failing = 0;

for (int grade : grades) {
    if (grade < 70) {
        failing++;
    }
}
System.out.println(failing + " students failing");  // 3 students failing

5. Checking If All / Any Meet a Condition

Check if ALL elements pass

java
public static boolean allPassing(int[] grades) {
    for (int grade : grades) {
        if (grade < 70) {
            return false;  // found one that fails
        }
    }
    return true;  // none failed
}

Check if ANY element passes

java
public static boolean anyHonors(int[] grades) {
    for (int grade : grades) {
        if (grade >= 90) {
            return true;  // found one
        }
    }
    return false;  // none found
}

6. Shifting Elements

Shift left (remove first)

java
int[] arr = {10, 20, 30, 40, 50};

for (int i = 0; i < arr.length - 1; i++) {
    arr[i] = arr[i + 1];
}
arr[arr.length - 1] = 0;  // fill the last slot

// Result: {20, 30, 40, 50, 0}

Shift right (remove last)

java
int[] arr = {10, 20, 30, 40, 50};

for (int i = arr.length - 1; i > 0; i--) {
    arr[i] = arr[i - 1];
}
arr[0] = 0;  // fill the first slot

// Result: {0, 10, 20, 30, 40}

7. Reversing an Array

java
int[] arr = {1, 2, 3, 4, 5};

for (int i = 0; i < arr.length / 2; i++) {
    int temp = arr[i];
    arr[i] = arr[arr.length - 1 - i];
    arr[arr.length - 1 - i] = temp;
}
// Result: {5, 4, 3, 2, 1}

Trace

8. Removing an Element at Index

java
public static int removeAt(int[] arr, int size, int index) {
    for (int i = index; i < size - 1; i++) {
        arr[i] = arr[i + 1];
    }
    return size - 1;  // new logical size
}
java
int[] data = {10, 20, 30, 40, 50, 0, 0};
int size = 5;

size = removeAt(data, size, 2);  // remove element at index 2
// data = {10, 20, 40, 50, 50, 0, 0}, size = 4
// Logical array: {10, 20, 40, 50}

9. Inserting an Element

java
public static int insertAt(int[] arr, int size, int index, int value) {
    // Shift right from the end
    for (int i = size; i > index; i--) {
        arr[i] = arr[i - 1];
    }
    arr[index] = value;
    return size + 1;
}
java
int[] data = {10, 20, 40, 50, 0, 0, 0};
int size = 4;

size = insertAt(data, size, 2, 30);  // insert 30 at index 2
// data = {10, 20, 30, 40, 50, 0, 0}, size = 5

10. Duplicate detection

java
int[] arr = {5, 3, 8, 3, 7};

for (int i = 0; i < arr.length; i++) {
    for (int j = i + 1; j < arr.length; j++) {
        if (arr[i] == arr[j]) {
            System.out.println("Duplicate: " + arr[i] 
                + " at indices " + i + " and " + j);
        }
    }
}
// Output: Duplicate: 3 at indices 1 and 3

Algorithm summary table

Complete example: Frequency counter

java
public class FrequencyCounter {
    public static void main(String[] args) {
        int[] rolls = {3, 6, 2, 6, 4, 1, 3, 6, 5, 2, 4, 3};
        
        // Count frequency of each die face (1-6)
        int[] freq = new int[7]; // indices 0-6, ignore index 0
        
        for (int roll : rolls) {
            freq[roll]++;
        }
        
        // Display results
        System.out.println("Die Roll Frequencies:");
        for (int face = 1; face <= 6; face++) {
            String bar = "";
            for (int j = 0; j < freq[face]; j++) {
                bar += "█";
            }
            System.out.println("  " + face + ": " + bar 
                + " (" + freq[face] + ")");
        }
        
        // Find most common roll
        int maxFace = 1;
        for (int face = 2; face <= 6; face++) {
            if (freq[face] > freq[maxFace]) {
                maxFace = face;
            }
        }
        System.out.println("Most common: " + maxFace);
    }
}
Die Roll Frequencies:
  1: █ (1)
  2: ██ (2)
  3: ███ (3)
  4: ██ (2)
  5: █ (1)
  6: ███ (3)
Most common: 3

AP Exam Tips

Common Mistakes

Key Vocabulary