153. Find Minimum in Rotated Sorted Array
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.如果nums[left]<nums[right],说明此事[left,right]范围内是没有旋转的,则返回nums[left]即可;
2.否则,如果nums[mid]>=nums[left],如果旋转点在右半部分,left=mid+1;
否则,旋转点在左半部分,right=mid;
class Solution {
public:
int findMin(vector<int>& nums) {
int left = 0, right = nums.size() - 1;
while (left < right){//<
if(nums[left]<nums[right]) return nums[left];
int mid = left + (right - left) / 2;
if (nums[mid] >= nums[left]){
left = mid+1;
}
else{
right = mid;//
}
}
return nums[left];
}
};
154. Find Minimum in Rotated Sorted Array II
Follow up for "Find Minimum in Rotated Sorted Array":
What if duplicates are allowed?Would this affect the run-time complexity? How and why?
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.
The array may contain duplicates.
class Solution {
public:
int findMin(vector<int>& nums) {
int left = 0, right = nums.size() - 1;
while (left < right){//<
if(nums[left]<nums[right]) return nums[left];
int mid = left + (right - left) / 2;
if (nums[mid] > nums[left]){
left = mid+1;
}
else if(nums[mid] < nums[left]){
right = mid;//
}else{
left++;//隔一点不同
}
}
return nums[left];
}
};