Find Minimum in Rotated Sorted Array II
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.
Analysis:
A preferred solution is using binary search. Tricky part is to remove duplicate and when to stop out from while loop. It cost me several failed submissions to figure that out.
Solution:
int findMin(int* nums, int numsSize) {
int start = 0, end = numsSize - 1;
int mid;
while(start + 1 < end)
{
mid = start + (end - start)/2;
// if right portion is sorted, minimum must be on left portion
if(nums[mid] < nums[end])
{
end = mid;
}
// otherwise check right portion
else if(nums[mid] > nums[end])
{
start = mid;
}
// or if they are equal, we don't know which direction to go, reduce end and check next time
else if(nums[mid] == nums[end])
{
end--;
}
}
return nums[start] < nums[end] ? nums[start] : nums[end];
}
No comments:
Post a Comment