题目描述:
Suppose an array sorted in ascending order 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.
Example 1:
Input: [3,4,5,1,2]
Output: 1
Example 2:
Input: [4,5,6,7,0,1,2]
Output: 0
寻找旋转数组的最小元素,显然是采用二分法,判断单增序列然后进一步循环。
class Solution {
public:
int findMin(vector<int>& nums) {
int begin=0;
int end=nums.size()-1;
int mid=(begin+end)/2;
while(begin<=end)
{
if(end-begin>=2)
{
if(nums[mid]<nums[mid-1]&&nums[mid]<nums[mid+1]) return nums[mid];
else if(nums[begin]<nums[begin+1]&&nums[begin]<nums[end]) return nums[begin];
else if(nums[end]<nums[end-1]&&nums[end]<nums[begin]) return nums[end];
else if(nums[mid]>nums[begin]) begin=mid+1;
else end=mid-1;
}
else if(end-begin==1) return min(nums[begin],nums[end]);
else if(begin==end) return nums[mid];
mid=(begin+end)/2;
}
}
};
本文介绍了一种通过二分法查找旋转排序数组中最小元素的方法。对于一个原本按升序排列后在某未知位置旋转的数组,我们可以通过比较中间元素与两端元素的关系来缩小搜索范围,直至找到最小值。
305

被折叠的 条评论
为什么被折叠?



