Given a rotated sorted array, recover it to sorted array in-place.
样例
[4, 5, 1, 2, 3] -> [1, 2, 3, 4, 5]
挑战
Expand
其他例子
In-place, O(1) extra space and O(n) time.
rotated 问题 三步翻转法:
1 找到最大值和最小值交界点,从此处对两边序列分别进行翻转
对于: 4,5,1,2,3
4, 5 —> 5, 4
1, 2, 3 —>3,2,1
则原序列变为 5,4,3,2,1
2 对整个序列进行翻转则可以获得结果
public class Solution {
/**
* @param nums: The rotated sorted array
* @return: The recovered sorted array
*/
public void recoverRotatedSortedArray(ArrayList<Integer> nums) {
// write your code
int l = nums.size();
for (int i = 1; i < l; i++) {
if (nums.get(i) < nums.get(i - 1)) {
reverse(nums, 0, i - 1);
reverse(nums, i, l - 1);
reverse(nums, 0, l - 1);
break;
}
}
}
public void reverse(ArrayList<Integer> nums, int start, int end) {
int temp;
while (start < end) {
temp = nums.get(start);
nums.set(start, nums.get(end));
nums.set(end, temp);
start++;
end--;
}
}
}
其他例子
abcdefg offset =3,
1) gfedcba
2) efg abcd
I love you
1) I evol uoy //对每个单词reverse
2) you love I //对整个句子reverse