# 有序数组中查找小于等于num的最左位置
我们有如下一个数组:

数组内的数字是有序的,我们假设不知道里面是小于等于数字9,设计一个函数,指定数组及数字,该函数返回小于等于9最左边的位置,不存在返回-1
# 算法步骤
,初始化赋值左右两边的位置
left、right,并计算出中间位置mid = (left + rignt) / 2,并初始化答案为index = -1,因为我们起初不知道存不存在该位置。
mid位置为5,小于等于9,满足我们的要求,我们使index = 1,该位置比我们目标值9要小,还存在更左的答案,让left = mid + 1,继续判断此时
left和right相等,计算出来的mid也等于left和right,此时数组的mid位置为9,小于等于我们要找的目标,我们使index = 2返回即可。
# 代码实现
# 方式一
采用边界为 left < right 的方式循环:
func BSNearLeft(arr []int, num int) index {
if arr == nil || len(arr) == 0 {
return -1
}
left, right, mid, index := 0, len(arr)-1, 0, -1
for left <= right {
mid = left + ((right - left) >> 1)
if arr[mid] <= num {
index = mid
left = mid + 1
} else {
right = mid - 1
}
}
return index
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16