Part A.
Part B.
[0, 17, 4]
Problem 2
Part A. (Several correct solutions, here are a few)
Input = [5] Output = "5 + " Input = [5, 6] Output = "5 + 6 + "
public static String makeAdditionExpression(int[] nums) { String expr = ""; if (nums.length == 0) { return expr; } // to avoid statement after the loop for (int i = 0; i < nums.length - 1; i++) { expr = expr + nums[i] + " + "; } expr += nums[nums.length - 1]; return expr; }
public class FibonacciGenerator { private int last; private int secondLast; public FibonacciGenerator() { last = 1; secondLast = -1; // special value to indicate first time we are calling next } public int next() { if (secondLast == -1) { secondLast = 0; return 1; } int curr = last + secondLast; secondLast = last; last = curr; return curr; } }
Problem 4
Part A. vals.size() = numVals
Part B. private ArrayList<Integer> vals;
Part C. (Any of the following accepted)-Less code to write in the methods -Less code to maintain -Less error-prone, or illustrations of this, e.g.: *Don't have to worry about updating numVals in mutators (or in add) *Or give a scenario about adding new mutators later and forgetting to update numVals along with vals.
-Empty nums -Nums with one value -Minimum is somewhere in the middle of the ArrayList, and ArrayList size > 2 -Minimum is the first value in the ArrayList -Minimum is the last value in the ArrayList -Nums with multiple copies of the minimum value -Nums with all values as the minimum -Nums with only Integer.MAX_VALUE -Minimum is negative and ArrayList size > 1 -Nums with Integer.MIN_VALUE
public static ArrayList<Double> zeroCrossings(int[] nums) { ArrayList<Double> result = new ArrayList<>(); for (int i = 0; i < nums.length-1; i++) { if (nums[i] == 0) { // safe to access at i-1 because no 0s at the ends if (nums[i-1] < 0 && nums[i+1] > 0 || (nums[i-1] > 0 && nums[i+1] < 0)) { result.add((double)i); } } else if (nums[i] > 0 && nums[i+1] < 0 || nums[i] < 0 && nums[i+1] > 0) { result.add(i + 0.5); } } return result; }