154. Find Minimum in Rotated Sorted Array II
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.
The array may contain duplicates.
Example 1:
Input: [1,3,5]
Output: 1
Example 2:
Input: [2,2,2,0,1]
Output: 0
Note:
This is a follow up problem to Find Minimum in Rotated Sorted Array.
Would allow duplicates affect the run-time complexity? How and why?
func findMin(nums []int) int {
lg := len(nums)
l := 0
r := lg - 1
if l+1 > r {
return min(nums[l], nums[r])
}
for l < r {
mid := (l + r) / 2
if nums[r] > nums[mid] {
r = mid
} else if nums[r]==nums[mid]{
if findLeftbound(nums,mid) {
r = mid
} else {
l = mid+1
}
} else {
l = mid + 1
}
}
return nums[l]
}
func min(i int, j int) int {
if i < j {
return i
} else {
return j
}
}
func findLeftbound(nums []int, mid int) bool {
for i:=mid;i>=0;i--{
if nums[i]< nums[mid] {
return true
}
}
return false
}