题目:单调递增数组,有重复的数,找小于目标值最大的index
字节面试的笔试题,要求时间复杂度小于O(n)
直接想到使用二分查找,但刚开始答成找和target相等的数,最后才反应过来是找小于target的数。。然后我想着能不能先找出来相等的,然后往前找小于target的数,然后面试官问,那如果只有一个数呢?如果数据的数全部大于target呢?。。
二分查找的大思路是对的,但是需要在判定条件上做一些改变
func find(num []int, target int, left int, right int) int {
for left <= right {
//防止溢出
mid := left + (right-left)/2
//重点就在 >=
if num[mid] >= target {
right = mid - 1
} else {
left = mid + 1
}
fmt.Println(left, right, mid)
}
if right < 0 {
return -1
}
return right
}