39. recover rotated sorted array恢复旋转排序数组

时间:2023-03-09 17:14:15
39. recover rotated sorted array恢复旋转排序数组

一句话思路:从左边开始的三步翻转法

39. recover rotated sorted array恢复旋转排序数组

一刷报错:

  1. 不理解start.end是位置随机定义的。i,j是临时变量,为start,end服务
  2. nums.size()区别于nums.length:用于范形变量。作用于一堆。但是如果都是从0开始,-1的原理相同
  3. index可以在括号里定义
  4. if (nums.get(index) > nums.get(index + 1)),不是index++,前面也会变
  5. set是一个方法,不能直接用set,必须用nums.set
  6. index指向的前一个元素比较大的时候,才要替换

风格上:

  1. 一次定义一个变量:int a; 换行; int b

总结:start.end是位置随机定义的,什么地方都有可能是start.end

用到的English数据结构,trick or not:array arraylist(因为无序就没用二分法)

时间复杂度n:最多每个数挪一次,空间复杂度1:数组存储,所需的空间没变

public class Solution {
/*
* @param nums: An integer array
* @return: nothing
*/
// write your code here
//reverse function
private void reverse(List<Integer> nums, int start, int end) {
int i;
int j;
for (i = start, j = end; i < j; i++, j--) {
int temp = nums.get(i);
nums.set(i, nums.get(j));
nums.set(j, temp);
}
} public void recoverRotatedSortedArray(List<Integer> nums) {
for (int index = 0; index < nums.size() - 1; index++) {
if (nums.get(index) > nums.get(index + 1)) {
reverse(nums, 0 , index);
reverse(nums, index + 1, nums.size() - 1);
reverse(nums, 0 , nums.size() - 1);
}
}
return;
}
}