旋转排序数组

 

http://www.lintcode.com/zh-cn/problem/recover-rotated-sorted-array/

错误点:注意花括号,别少些~~~

注意点:

找 

[1, 1, 1, 1, 1, 1, 1, 1, 1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1] 中的分界点,不能用二分法。只能依次遍历。 (类似于黑箱,不打开的那个永远是最小的,所以只有全打开才能找到最小的)
时间复杂度主要在reverse里,O(n),所以用二分法也不会简化时间复杂度。

两种方式,start和end的数据用不用i,j存都可以;
 1  private void reverse(ArrayList<Integer> nums, int start , int end) {
 2         for(int i = start, j = end; i < j; i++,j--) {
 3             int temp = nums.get(i);
 4             nums.set(i,nums.get(j));
 5             nums.set(j,temp);    
 6         }
 7     }*/
 8     
 9    private void reverse(ArrayList<Integer> nums, int start, int end) {
10        while(start<end) {
11             int temp = nums.get(start);
12             nums.set(start, nums.get(end));
13             nums.set(end, temp);
14             start++;
15             end--;
16         }
17         return;
18     }
View Code
       
原文地址:https://www.cnblogs.com/ddcckkk/p/6800843.html