【牛客刷题专栏】0x13:JZ11 旋转数组的最小数字(C语言编程题)

前言

  • 个人推荐在牛客网刷题(点击可以跳转),它登陆后会保存刷题记录进度,重新登录时写过的题目代码不会丢失
  • 个人刷题练习系列专栏:个人CSDN牛客刷题专栏。 题目来自:牛客/题库 / 在线编程 / 剑指offer:
    在这里插入图片描述

目录

  • 前言
  • 问题描述:
  • 举例:
  • 解法思路:
  • 代码结果:
  • 结束语


问题描述:

  • 有一个长度为 n 的非降序数组,比如[1,2,3,4,5],将它进行旋转,即把一个数组最开始的若干个元素搬到数组的末尾,变成一个旋转数组,比如变成了[3,4,5,1,2],或者[4,5,1,2,3]这样的。请问,给定这样一个旋转数组,求数组中的最小值。
  • 数据范围:1≤n≤10000,数组中任意元素的值: 0≤val≤10000
    要求:空间复杂度:O(1) ,时间复杂度:O(logn)

举例:

//示例1:
//输入:
[3,4,5,1,2]
//返回值:
1
//==========================
//示例2:
//输入:
[3,100,200,3]
//返回值:
3

解法思路:

  • 只要出现降序则出现了最小值 比如[4,5,1,2,3] :5到1是降序,则1就是最小值;

  • 如果没出现降序,说明没旋转,则第一个数就是最小值。


代码结果:

int minNumberInRotateArray(int* rotateArray, int rotateArrayLen )
{
    int i=0;
    for(i=1;i<rotateArrayLen;i++)
    {
        if(rotateArray[i-1]>rotateArray[i])
            return rotateArray[i];
    }
    return rotateArray[0];
}

结束语

  • 以上就是该C语言编程题的内容。可以在牛客尝试刷几道题目来练习实践。牛客网刷题(点击可以跳转),可以尝试注册使用。
  • 题目来自:牛客/题库 / 在线编程 / 剑指offer:
    在这里插入图片描述

你可能感兴趣的:(#,牛客刷题专栏,c语言,开发语言,算法,数据结构)