AcWing 22. 旋转数组的最小数字
原题链接
中等
作者:
豚厂卷心菜
,
2021-07-18 16:47:53
,
所有人可见
,
阅读 233
class Solution {
public int findMin(int[] nums) {
int n = nums.length;
if(n == 0)return -1;
int num = nums[0];
int l = 0;
int r = -1;
//删除第二段数组中等于旋转数组起始位置的数
for(int i = n-1;i>=0;i--){
if(nums[i] != nums[0]){
r = i;
break;
}
}
//如果r = -1 表示数组各元素均为num
if(r == -1) return num;
//对删除后的数组进行二分出区间,找到了第一段区间的最后一个元素
int end = r;
while(l < r){
int mid = l + (r - l +1 >> 1);
if(nums[mid] >= num){
l = mid;
}else
r = mid - 1;
}
//如果数组单调
if(l == end)return num;
//返回第二段元素的第一个即为最小值
else return nums[l+1];
}
}