📟作者主页:慢热的陕西人
🌴专栏链接:力扣刷题日记
📣欢迎各位大佬👍点赞🔥关注🚓收藏,🍉留言
文章目录
- 牛客热题:旋转数组的最小数字
- 题目链接
- 方法一:二分
- 思路
- 代码
- 复杂度
牛客热题:旋转数组的最小数字
题目链接
旋转数组的最小数字_牛客题霸_牛客网 (nowcoder.com)
方法一:二分
思路
- 指针l,r用于计算mid
if(nums[mid] > nums[r]) l = mid + 1;
放弃左边的查找区间else if(nums[mid] < nums[r]) r = mid;
放弃右边的查找区间else r--;
队友三个值相等,或者其中有值相等,直接更新查找空间。
代码
int minNumberInRotateArray(vector<int>& nums)
{
int l = 0, r = nums.size() - 1;
while(l < r)
{
int mid = (l + r) >> 1;
if(nums[mid] > nums[r]) l = mid + 1;
else if(nums[mid] < nums[r]) r = mid;
else r--;
}
return nums[l];
}
复杂度
时间复杂度:O( l o g N logN logN),大部分情况维持二分的时间复杂度,但是当全相等的时候,就变成了O(N)
空间复杂度:O(1),使用了常数个额外的变量