Given a rotated sorted array, recover it to sorted array in-place.

public class Solution {
    /**
     * @param nums: The rotated sorted array
     * @return: void
     */
    public void recoverRotatedSortedArray(ArrayList<Integer> nums) {
        // write your code
        int len = nums.size();
        int index = 0;
        while(index < len-1 && nums.get(index) <= nums.get(index+1)){
        //the element can be the same, so <= is important
            index++;
        }
        reverseUtil(nums,0,index);
        reverseUtil(nums,index+1,len-1);
        reverseUtil(nums,0,len-1);
    }
    //reverse an arraylist
    public void reverseUtil(ArrayList<Integer> nums, int lo, int hi){
        if(lo > hi) return;
        for(int i = lo; i <= hi; i++){
            nums.add(i,nums.remove(hi));
        }
    }
}