一. 题目

二. 思路

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

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

三. 代码

class Solution
{
    int tfind(int[] a, int l, int r)
    {
        while (l < r)
        {
            int mid = l + r >> 1;
            if (a[l] <= a[r]) return a[l];//如果查找范围有序
            if (a[l] <= a[mid]) l = mid + 1;//mid在左边有序段
            else r = mid;//mid在右边有序段
        }
        return a[l];
    }

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