- 《剑指Offer》中的答案太过繁琐
- 该答案非常精简,但是内容很多,主要是各种场景非常的精巧
- 二分查找终止条件
- 二分查找时,中间值跟谁比的问题(基准值)
import java.util.ArrayList; public class Solution { public int minNumberInRotateArray(int [] a) { if (a == null || a.length == 0) return 0; int l = 0, r = a.length -1, m = 0; while (l < r) { // 注意终止条件 if (a[l] < a[r]) { // 最高优先级的场景 return a[l]; } m = l + ((r - l) >> 1); // 较规范的求二分中间下标的写法,避免溢出且使用位运算 if (a[m] > a[r]) l = m + 1; // 能判断出来m位于左序列,此时左指针可以移动到m+1 else if (a[m] < a[r]) r = m; // m位于右序列,由于a[m]可能是候选结果,因此r不能越过m else r--; // 逐步缩小问题空间 } return a[l]; } }