Find Minimum in Rotated Sorted Array II

    (i.e., 0 1 2 4 5 6 7 might become 4 5 6 7 0 1 2).

    The array may contain duplicates.

    Example

    题解

    由于此题输入可能有重复元素,因此在时无法使用二分的方法缩小start或者end的取值范围。此时只能使用递增start/递减end逐步缩小范围。

    1. public class Solution {
    2. * @param num: a rotated sorted array
    3. * @return: the minimum number in the array
    4. */
    5. public int findMin(int[] num) {
    6. if (num == null || num.length == 0) return Integer.MIN_VALUE;
    7. // case1: num[0] < num[num.length - 1]
    8. // if (num[lb] < num[ub]) return num[lb];
    9. // case2: num[0] > num[num.length - 1] or num[0] < num[num.length - 1]
    10. int mid = lb + (ub - lb) / 2;
    11. if (num[mid] < num[ub]) {
    12. ub = mid;
    13. lb = mid;
    14. } else {
    15. ub--;
    16. }
    17. }
    18. return Math.min(num[lb], num[ub]);

    最坏情况下 O(n), 平均情况下 O(\log n).