Talk is cheap.
func findMin(nums []int) int {
if len(nums) == 0 {
return -1
}
i, j, mid := 0, len(nums) - 1, 0
for i + 1 < j {
mid = i + (j - i) >> 1
if nums[mid] > nums[j] {
i = mid
} else if nums[mid] < nums[j] {
j = mid
} else {
j -= 1
}
}
if nums[i] > nums[j] {
return nums[j]
} else {
return nums[i]
}
}