思路
本质就是二分搜索的思路,只是目标变了一下。这里只需要将目标变成找第一个比前一个元素小的元素即可。套用的也是九章的二分搜索模版。
【有一个特殊情况是数组没有发生旋转:这个时候其实也不需要特殊处理,只要将判断条件设置为mid > end即可,而不是mid > start】
复杂度
时间复杂度O(logn), 空间复杂度O(1)
代码
class Solution {
public int findMin(int[] nums) {
int start = 0, end = nums.length-1;
while(start + 1 < end) {
int mid = start + (end-start)/2;
if(mid > 0 && nums[mid] < nums[mid-1]) {
return nums[mid];
}
if(nums[mid] > nums[end]) {
start = mid;
} else {
end = mid;
}
}
return Math.min(nums[start], nums[end]);
}
}