1. The method should be `static`. 2. The method should throw `NoSuchElementException` when the list is empty. 3. I prefer to index by `[left, right)` instead of using `subList` 4. Choose a good pivot location, and you don't need the `size() == 2`. In code: public static int findReset(List<Integer> rotatedArray) { if (rotatedArray.isEmpty()) { throw new NoSuchElementException("No reset for an empty list"); } return findReset0(rotatedArray, 0, rotatedArray.size()); } private static int findReset0(List<Integer> rotatedArray, int left, int right) { // when array is already sorted if(left + 1 == right || rotatedArray.get(left) < rotatedArray.get(right - 1)) return left; int middle = (left + right) / 2; if (rotatedArray.get(left) < rotatedArray.get(middle - 1)) { // when left side is monotonically increasing return findReset0(rotatedArray, middle, right); } else { // when right side is monotonically increasing return findReset0(rotatedArray, left, middle); } }