# 有序数组中查找小于等于num的最左位置

我们有如下一个数组:

数组内的数字是有序的,我们假设不知道里面是小于等于数字9,设计一个函数,指定数组及数字,该函数返回小于等于9最左边的位置,不存在返回-1

# 算法步骤

  1. ,初始化赋值左右两边的位置leftright,并计算出中间位置mid = (left + rignt) / 2,并初始化答案为index = -1,因为我们起初不知道存不存在该位置。

    image-20230907233809200

    mid位置为5,小于等于9,满足我们的要求,我们使index = 1,该位置比我们目标值9要小,还存在更左的答案,让left = mid + 1,继续判断

  2. 此时leftright相等,计算出来的mid也等于leftright,此时数组的mid位置为9,小于等于我们要找的目标,我们使index = 2返回即可。

    image-20230907234154239

# 代码实现

# 方式一

采用边界为 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

#

上次更新: 9/11/2023,