public class Solution {
/*
* @param nums: An integer
* @return:
*/
public void recoverRotatedSortedArray(List<Integer> nums) {
// write your code here
if(nums == null || nums.size() == 0){
return ;
}
// int s = 0, e = nums.size() - 1, n = nums.size();
// int target = nums.get(n - 1);
// while(s + 1 < e){
// int m = s + (e - s)/2;
// if(nums.get(m) > target){
// s = m;
// }else{
// e = m;
// }
// }
// int index = nums.get(s) <= target ? s : e;
int n = nums.size();
for(int i = 0; i < n - 1; i++){
if(nums.get(i + 1) < nums.get(i)){
reverse(nums, 0, i);
reverse(nums, i + 1, n - 1);
reverse(nums, 0, n - 1);
return;
}
}
// int pos = -1;
// for(int i = 0; i < nums.size()-1; i++){
// if(nums.get(i) > nums.get(i+1)){
// pos = i;
// break;
// }
// }
// reverse(nums, 0, pos);
// reverse(nums, pos+1, nums.size()-1);
// reverse(nums, 0, nums.size()-1);
// }
// public void reverse(List<Integer> nums, int start, int end){
// while(start < end){
// int temp = nums.get(start);
// nums.set(start++, nums.get(end));
// nums.set(end--, temp);
// }
}
private void reverse(List<Integer> nums, int start, int end){
int s = start, e = end;
while(s < e){
int temp = nums.get(s);
nums.set(s, nums.get(e));
nums.set(e, temp);
s ++;
e --;
}
}
};