##题目
整数数组 nums 按升序排列,数组中的值互不相同
在传递给函数之前,nums 在预先未知的某个下标 k(0 <= k < nums.length)上进行了 旋转,使数组变为 [...k+1], ..., nums[n-1], nums[0], nums[1], ..., nums[k-1]](下标 从 0 开始 计数)
例如, [0,1,2,4,5,6,7] 在下标 3 处经旋转后可能变为...*
* @param num 给定的旋转后数组
* @return 查询结果
*/
public static int findMin(int[] num)...第一个想到的就应该是用二分法试试
下面我们来分析一下
一个增序的数组是这样的
旋转n次之后就是这样的
所以我们的目标就是在这样的数组里边找目标值
可以非常清晰的看到
第二段的所有值都是小于第一段的值...也就是最小值存在于mid~end之间
此时问题就简化为了在一个单调递增的区间中查找最小值了
所以总的规律就是:
在二分法的基础上
当中间值mid比起始值start对应的数据大时
判断一下mid和end