1.暴力法
挨个遍历,寻找最小值
代码如下:
class Solution {
public:
int findMin(vector<int>& nums) {
int imin=nums[0];
for(int i=1;i<nums.size();i++)
imin=min(imin,nums[i]);
return imin;
}
};
2.二分法
由题意知原数组是升序排序,在某个点旋转之后数组中元素的排列只会出现下面2种情况:
全部升序 如 1 2 3 4 5
升序+升序 如3 4 5 1 2
即旋转后的数组仍然是部分有序的,故使用二分法
代码如下:
class Solution {
public:
int findMin(vector<int>& nums) {
//使用右边界是因为可能存在1 2 3 4这种情况
int left=0,right=nums.size()-1;
while(left<right)
{
int mid=left+(right-left)/2;
if(nums[mid]<nums[right])//num[mid]<nums[right],则nums[mid]可能是最小元素
right=mid;
else if(nums[mid]>nums[right])
left=mid+1;
}
return nums[left];
//return nums[right];//返回哪个结果都是对的
}
};