Given a rotated sorted array, recover it to sorted array in-place.
Have you met this question in a real interview?
Yes
Example
[4, 5, 1, 2, 3]
-> [1, 2, 3, 4, 5]
Challenge
In-place, O(1) extra space and O(n) time.
Clarification
What is rotated array?
- For example, the orginal array is [1,2,3,4], The rotated array of it can be [1,2,3,4], [2,3,4,1], [3,4,1,2], [4,1,2,3]
- 思路: 三次翻转
- 易错点: 翻转
public class Solution { /** * @param nums: The rotated sorted array * @return: void */ public void recoverRotatedSortedArray(ArrayList<Integer> nums) { // write your code int k = 0; int len = nums.size(); for(int i = 1; i < len; i++){ if(nums.get(i - 1) > nums.get(i)){ reverse(nums, 0, i - 1); reverse(nums, i, len - 1); reverse(nums, 0, len - 1); break; } } } private void reverse(ArrayList<Integer> nums, int start, int end){ while(start < end){ int temp = nums.get(start); nums.set(start, nums.get(end)); nums.set(end, temp); start++; end--; } } }