// 局部最小值问题: 无序数组,没有相同元素,返回任意一个局部最小值
// l(0) < l(1) && l(n) < l(n-1) && l(i-1) < li < l(i+1)
func TestGetLessIndex(t *testing.T) {
t.Log(GetLessIndex([]int{22233,233,444,5555,233,421,3445,6}))
}
func GetLessIndex(arr []int) int {
if arr == nil || len(arr) == 0 {
return -1
}
if len(arr) == 1 || arr[0] < arr[1] {
return 0
}
if arr[len(arr) - 1 ] < arr[len(arr) - 2] {
return len(arr) - 1
}
left, right, mid := 1, len(arr) - 2, 0
for left < right {
mid = (left + right) / 2
if arr[mid] > arr[mid - 1] {
right = mid - 1
}else if arr[mid] > arr[mid + 1] {
left = mid + 1
}else {
return mid
}
}
return left
}
二分——无序无重复元素数组的局部最小值的索引
于 2021-10-22 09:08:23 首次发布