文章目录
寻找第一个的满足条件的位置
例如nums = [5,7,7,8,8,10], target = 8,第一个的满足条件的位置=3.
和查找一个数
类似, 我们仍然套用查找一个数
的思维框架和代码模板。
思维框架
- 首先定义搜索区间为 [left, right]。
- 终止搜索条件为 left > right。
- 循环体内,我们不断计算 mid ,并将 nums[mid] 与 目标值比对。
- 如果 nums[mid] 等于目标值, 则收缩右边界,我们找到了一个备胎,由于我们要找第 1 个位置,此时我们应该向左边继续查找;(注意这里不一样)
- 如果 nums[mid] 小于目标值, 说明目标值在 mid 右侧,这个时候搜索区间可缩小为 [mid + 1, right]
- 如果 nums[mid] 大于目标值, 说明目标值在 mid 左侧,这个时候搜索区间可缩小为 [left, mid - 1]
- 由于不会提前返回,因此我们需要检查最终的 left,看 nums[left]是否等于 target。
- 如果不等于 target,或者 left 出了右边边界了,说明至死都没有找到一个备胎,则返回 -1.
- 否则返回 left 即可,备胎转正。
代码模板: