给定一个旋转排序数组,在原地恢复其排序。(升序)
样例
Example1:[4, 5, 1, 2, 3]
-> [1, 2, 3, 4, 5]
Example2:[6,8,9,1,2]
-> [1,2,6,8,9]
挑战
使用O(1)的额外空间和O(n)时间复杂度
说明
什么是旋转数组?
- 比如,原始数组为[1,2,3,4], 则其旋转数组可以是[1,2,3,4], [2,3,4,1], [3,4,1,2], [4,1,2,3]
- public class Solution {
- /**
* @param nums: An integer array
* @return: nothing
*/
public void recoverRotatedSortedArray(List<Integer> nums) {
// write your code here
int index=0;
int min=Integer.MAX_VALUE;
for(int i=0;i<nums.size();i++){
if(min>nums.get(i)){
index=i;
min=nums.get(i);
}
}
reverse(nums, 0, index);
reverse(nums, index, nums.size());
reverse(nums, 0, nums.size());
}
private static void reverse(List<Integer> nums,int from,int to){
for(int i=from;i<(from+to)/2;i++){
int left=nums.get(i);
int right=nums.get(to-i+from-1);
nums.set(i, right);
nums.set(to-i+from-1, left);
}
}
}
输入
查看差别
[4,5,1,2,3]
输出
[1,2,3,4,5]
期望答案
[1,2,3,4,5]