Part A. x
Part B. a
Problem 2
Part A. n
Part B. O(n^2)
Problem 3
Part A. O(n log n)
Part B. get the entrySet() and iterate over it; that's O(n)
Problem 4
school no such entry school no such entryNotes:
Problem 5
A. 6, 7
B. 9, 6
C. y
D 6, 12
E. 23, 24
Problem 6
There were several versions of correct logic to get the same effect. (Changes shown in bold)
public static void paintItRed(Color[][] image, int row, int col) { if (!inRange(image, row, col)) { return; // we're not in bounds of the image } if (image[row][col].equals(Color.BLACK)) { return; // we've hit the edge of the region } if (image[row][col].equals(Color.RED)) { return; // we've already been here } image[row][col] = Color.RED; // recursively call paintItRed on the neighbors of (row, col) for (int rowOffset = -1; rowOffset <= 1; rowOffset++) { for (int colOffset = -1; colOffset <= 1; colOffset++) { if (!(rowOffset == 0 && colOffset = 0)) { // don't call it with same params paintItRed(image, row + rowOffset, col + colOffset); } } } }
Problem 7 Solution shown in bold.
static void sortByDistance(ArrayList<Point> points, Point target) { Collections.sort(points, new DistanceComparator(target)); } class DistanceComparator implements Comparator<Point> { public int compare(Point a, Point b) { return (int) (a.distanceSq(target) - b.distanceSq(target)); } public DistanceComparator(Point target) { this.target = target; } private Point target; }Problem 8 Showing the two main approaches.
// Solution 1 (no helper function necessary) public static int num3s(int num) { if (num == 0) { return 0; } int count = 0; if (num % 10 == 3) { count++; } return count + num3s(num / 10); } // Solution 2 (tail-recursive solution) public public static int num3s(int num) { return num3sR(num, 0); } // num3sR returns the sum of count and the number of 3's in num public public static int num3sR(int num, int count) { if (num == 0) { return count; } if (num % 10 == 3) { count++; } return num3s(num / 10, count); }