文章目录
- 题目链接:
- 题目描述:
- 解法
- C++ 算法代码:
- 图解
题目链接:
153. 寻找旋转排序数组中的最小值
题目描述:

解法
暴力解法:O(n)
从前往后找数组中的最小值。
二分算法:O(logn)
先找二段性
因为这里的数是全部不相同的,所以可以这么搞。

以
D点作为参照物:
AB里面每一个值都>D,CD里面每一个值都<=D所以,最小值就是
C点所在的位置。
A~B:nums[i]>nums[n-1]
C~D:nums[i]<=nums[n-1]

C++ 算法代码:
class Solution
{
public:
int findMin(vector<int>& nums)
{
int left = 0, right = nums.size() - 1;
int x = nums[right]; // 标记一下最后一个位置的值
while(left < right)
{
int mid = left + (right - left) / 2;
if(nums[mid] > x) left = mid + 1;
else right = mid;
}
return nums[left];
}
};
图解
例如:nums = [3,4,5,1,2]

-
left = 0, right =4x=nums[4]=2进入循环,
mid = 2nums[mid] > x,left=3 -
left = 3, right =4进入循环,
mid = 3right = 3 -
结束程序,返回
1



















