public int minNumberInRotateArray(int [] array) { if(array.length == 0) return 0; int l = 0, r = array.length-1; while(l < r){ if(array[l] < array[r]){ // 这一步的作用是当l~r这部分 l位置小于r位置,那么l位置就是最小的那个,为什么呢? //当 array[mid] > array[r]的时候,l = mid+1,因为array[mid] > array[r],所以array[l]要是小于array[r],那么array[l]不就是最小的那个了吗? return array[l]; } int mid = l + (r-l)/2; if(array[mid] < array[r]){ r = mid; }else if(array[mid] > array[r]){ l = mid+1; }else { --r; //相等的时候为什么要r-- //因为当 3 1 2 2 2 的时候 //我们可以知道array[mid] == array[r],此时最小的数要么是array[mid],要么是mid以前的数,那么为了使得mid往前移位,我们就需要将r-- } } return array[l]; }