一. 题目

二. 思路

  • 二段性,找到一个位置,使得左右不分都有序。

  • 若数组本来就有序,则a[0]就是答案。

三. 代码

class Solution
{
    int tfind(int[] a, int l, int r)
    {
        while (l < r)
        {
            int mid = (l + r) / 2;
            if (a[l] <= a[mid])//左边有序
            {
                if (a[mid + 1] > a[r]) l = mid + 1;//右边无序
                else return Math.min(a[l], a[mid + 1]);//右边有序
            } else r = mid;//右边有序,左边无序
        }

        return a[l];
    }

    public int findMin(int[] nums)
    {
        return tfind(nums, 0, nums.length - 1);
    }
}