JZ11 旋转数组的最小数字

JZ11 旋转数组的最小数字

描述

有一个长度为 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

1
2
输入:[3,4,5,1,2]
返回值:1

示例2

1
2
输入:[3,100,200,3]
返回值:3

题解

初见思路:首先从头开始找,往后找找到一个比当前小的,然后这个就是最小值。

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param nums int整型vector
* @return int整型
*/
int minNumberInRotateArray(vector<int>& nums) {
int prev = -1;
for(int i : nums){
if (prev>i) {
return i;
}
prev = i;
}
return nums[0];
}
};