1.题目描述
示例 1:
输入:nums = [3,4,5,1,2]
输出:1
解释:原数组为 [1,2,3,4,5] ,旋转 3 次得到输入数组。
示例 2:
输入:nums = [4,5,6,7,0,1,2]
输出:0
解释:原数组为 [0,1,2,4,5,6,7] ,旋转 4 次得到输入数组。
示例 3:
输入:nums = [11,13,15,17]
输出:11
解释:原数组为 [11,13,15,17] ,旋转 4 次得到输入数组。
2.代码
cpp
int findMin(int* nums, int numsSize) {
int left = 0;
int right = numsSize-1;
while(left <= right){
int mid = (left+right)/2;
if(mid<numsSize-1 && nums[mid+1] < nums[mid]){
return nums[mid+1];
}
if(nums[left]<nums[mid]){
left = mid+1;
}
else if(nums[left]>nums[mid]){
right = mid-1;
}
else if(nums[left]==nums[mid]){
left = mid+1;
}
}
if(left > numsSize-1){//表示left一直往右走,始终没找到分界点,表示数组未旋转
return nums[0];
}
return 0;
}