题解 | #旋转数组的最小数字#

旋转数组的最小数字

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;
}

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务