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.
题意:给出一个数组,可能经过旋转的,并且数组中包含重复的元素。求其最小值
思路:用二分法。(1)如果a[mid] < a[right],说明最小值是在[left, mid]之间。(2)如果a[mid] > a[right],说明最小值在[mid+1,right]之间.(3)如果a[mid] = a[right],说明最小 值在[left, right-1]之间
代码如下:
class Solution {
public int findMin(int[] nums)
{
int left = 0, right = nums.length - 1;
while (left < right)
{
int mid = (left + right) >> 1;
if (nums[mid] > nums[right]) left = mid + 1;
else if (nums[mid] < nums[right])
{
right = mid;
}
else
{
right--;
}
}
return nums[left];
}
}