39. recover rotated sorted array恢复旋转排序数组
一句话思路:从左边开始的三步翻转法
一刷报错:
- 不理解start.end是位置随机定义的。i,j是临时变量,为start,end服务
- nums.size()区别于nums.length:用于范形变量。作用于一堆。但是如果都是从0开始,-1的原理相同
- index可以在括号里定义
- if (nums.get(index) > nums.get(index + 1)),不是index++,前面也会变
- set是一个方法,不能直接用set,必须用nums.set
- index指向的前一个元素比较大的时候,才要替换
风格上:
- 一次定义一个变量: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; } }