1 条题解
-
0
CJBS01|编号首次出现 题解
核心算法
在有序数组中二分查找第一个满足 的位置。
思路推导
对固定的 ,条件 随下标呈现“前面不满足、后面满足”的单调性。找到第一个满足位置
pos后,再检查a[pos] == x。相等则它就是第一次出现的位置,否则数组中没有 。正确性说明
二分始终保留第一个可能满足 的位置。循环结束时,
left左侧全部小于 ,left自身是首个不小于 的位置。因此若a[left]==x,它必为第一次出现;若不相等,则不存在 。复杂度
- 每次查询时间复杂度:;
- 总时间复杂度:;
- 额外空间复杂度:。
易错点
- 题目要第一次出现的位置,不是任意一个位置;
- 输出位置从 开始;
- 二分结束后必须检查是否真的等于 ;
- 要覆盖 小于最小值、大于最大值和全数组相等的情况。
- 1
信息
- ID
- CJBS01
- 时间
- 2000ms
- 内存
- 256MiB
- 标签
- 递交数
- 12
- 已通过
- 4
- 上传者