题解 | #旋转数组的最小数字#
旋转数组的最小数字
https://www.nowcoder.com/practice/9f3231a991af4f55b95579b44b7a01ba
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param nums int整型一维数组
* @param numsLen int nums数组长度
* @return int整型
*/
int minNumberInRotateArray(int* nums, int numsLen ) {
// write code here
int i = 0,j = 0;
int low = 0;
int high = numsLen-1;
int mid = (low+high)/2;
while (1) {
if (high-low+1<3) {
if(nums[low]>nums[low+1]) return nums[low+1];
else if(nums[high-1]>nums[high]) return nums[high];
}
//if(nums[mid-1]>nums[mid]) return nums[mid];
if (nums[mid]<nums[low])high = mid;
else if (nums[mid]>nums[low]) low = mid;
else if (nums[mid]=nums[low]) //考虑特例
{
for(i = 0; i<numsLen-1; i++) //10111这种只有暴力循环了
{
if(nums[i]>nums[i+1]) return nums[i+1];
}
return nums[0]; ////0111这种不循环的
}
mid = (low+high)/2;
}
return nums[0];
}
查看4道真题和解析
