前言
- 个人推荐在牛客网刷题(点击可以跳转),它登陆后会保存刷题记录进度,重新登录时写过的题目代码不会丢失。
- 个人刷题练习系列专栏:个人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: