题目描述:
Suppose a sorted array is rotated at some pivot unknown to you beforehand.
(i.e., 0 1 2 4 5 6 7 might become 4 5 6 7 0 1 2).
Find the minimum element.You may assume no duplicate exists in the array.
分析:
在有序数组旋转之后的序列中找出最小值。
方法1、暴力法调用vector中的成员函数,获取最小元素的迭代器,然后解引用即可。方法2、只需从前往后找出第一个不大于最末尾元素的元素即为最小值
方法3、二分法查找。注意不要用vector的sizetype作为下标类型,否则会运行时错误。
以下是三种方法的C++实现:
/*方法1. 14ms/*/
class Solution {
public:
int findMin(vector<int>& nums) {
if(nums.empty())
return 0;
else
return *min_element(nums.begin(),nums.end());
}
};
/*//方法2. 10ms///*/
class Solution {
public:
int findMin(vector<int>& nums) {
vector<int>::size_type i = 0;
vector<int>::size_type j = nums.size()-1;
while(i <= j)
{
if(nums[i] <= nums[j])
break;
i++;
}
return nums[i];
}
};
/*方法3. 7ms//*/
class Solution {
public:
int findMin(vector<int>& nums) {
int left = 0;
int n= nums.size()-1;
int right = size;
int mid = 0;
while(left<= right)
{
mid = (left + right )/2;
if(nums[mid] > nums[n]) /* 右半截查找 */
left = mid + 1;
else /* 左半截查找 */
right = mid - 1;
}
return nums[left]; /*当lefy > right 时跳出循环,此时的nums[left]就是最小元素*/
}
};