153. 寻找旋转排序数组中的最小值

image.png

二分法

  1. class Solution {
  2. public int findMin(int[] numbers) {
  3. int left = 0, right = numbers.length - 1;
  4. while (left < right) {
  5. int mid = left + (right - left) / 2;
  6. // 这里的作用是判断 left ~ right 之间是否是单调递增的
  7. // 如果中间值比右边大,说明不是单调递增的,所以数组有旋转过,要把 left 移到 mid 右边
  8. if (numbers[mid] > numbers[right])
  9. left = mid + 1;
  10. // 否则说明 left ~ right 是单调递增的
  11. else right = mid;
  12. }
  13. return numbers[left];
  14. }
  15. }