给定一个旋转排序数组,在原地恢复其排序。
什么是旋转数组?
- 比如,原始数组为[1,2,3,4], 则其旋转数组可以是[1,2,3,4], [2,3,4,1], [3,4,1,2], [4,1,2,3]
样例
解题思路:
[4, 5, 1, 2, 3]
-> [1, 2, 3, 4, 5]
可采用三次翻转的思路,
第一次翻转5,4
第二次翻转3,2,1
第三次翻转1,2,3,4,5
解答:
public class Solution {
/*
* @param nums: An integer
* @return:
*/
public void recoverRotatedSortedArray(List<Integer> nums) {
// write your code here
int p;
for(p=1;(p<nums.size()&&(nums.get(p)>=nums.get(p-1)));p++)
if(p==nums.size()){
break;
}
reverse(nums,0,p-1);
reverse(nums,p,nums.size()-1);
reverse(nums,0,nums.size()-1);
}
public static void reverse(List<Integer> nums,int start,int end){
int i,j;
for(i=start,j=end;i<j;i++,j--){
int temp_i=nums.get(i);
int temp_j=nums.get(j);
nums.set(i,temp_j);
nums.set(j,temp_i);
}
}
};