题解 | #旋转数组的最小数字#
旋转数组的最小数字
https://www.nowcoder.com/practice/9f3231a991af4f55b95579b44b7a01ba
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param nums int整型一维数组
* @param numsLen int nums数组长度
* @return int整型
*/
void find(int *nums,int len,int left,int right,int *res)
{
//*res保存寻得的结果
//终止条件,左指针超过右指针
if(left>right)return ;
if(left==right)
{
*res=(*res)<nums[left]?(*res):nums[left];
return;
}
int mid=(left+right)/2;
//mid既不是第一个元素,也不是最后一个元素时
if(mid>0&&mid<len-1)
{
if(nums[mid]<nums[mid+1]&&nums[mid]<nums[mid-1]&&nums[mid]<*res)
{
*res=nums[mid];
return;
}
}
//递归
find(nums,len,left,mid-1,res);
find(nums,len,mid+1,right,res);
}
int minNumberInRotateArray(int* nums, int numsLen ) {
// write code here
int left=0;
int right=numsLen-1;
int temp=10001;
find(nums,numsLen,left,right,&temp);
//寻找范围是不包含头尾元素的,所以还需要和头元素,尾元素进行一次比较,取较小值
temp=temp>nums[0]?nums[0]:temp;
temp=temp<nums[numsLen-1]?temp:nums[numsLen-1];
return temp;
}
查看17道真题和解析