Given a rotated sorted array, recover it to sorted array in-place.
Example
[4, 5, 1, 2, 3]
-> [1,
2, 3, 4, 5]
Challenge
找到数组的旋转点,旋转点左侧倒序排列,右侧同样倒序排列,最后整个数组再倒序排列。
In-place, O(1) extra space and O(n) time.
[4,
5, 1, 2, 3]
-> [5, 4,
3, 2, 1]
-> [1, 2,
3, 4, 5]
public class Solution {
/**
* @param nums: The rotated sorted array
* @return: void
*/
public void recoverRotatedSortedArray(ArrayList<Integer> nums) {
for(int i = 0; i < nums.size() - 1; i++) {
if(nums.get(i) > nums.get(i + 1)) {
reverse(nums, 0, i);
reverse(nums, i + 1, nums.size() - 1);
reverse(nums, 0, nums.size() - 1);
return;
}
}
}
private void reverse(ArrayList<Integer> nums, int start, int end) {
while(start < end) {
int tmp = nums.get(start);
nums.set(start, nums.get(end));
nums.set(end, tmp);
start ++;
end --;
}
}
}