1 条题解

  • 0
    @ 2026-8-10 13:50:07

    CJBS01|编号首次出现 题解

    核心算法

    在有序数组中二分查找第一个满足 aixa_i\ge x 的位置。

    思路推导

    对固定的 xx,条件 aixa_i\ge x 随下标呈现“前面不满足、后面满足”的单调性。找到第一个满足位置 pos 后,再检查 a[pos] == x。相等则它就是第一次出现的位置,否则数组中没有 xx

    正确性说明

    二分始终保留第一个可能满足 aixa_i\ge x 的位置。循环结束时,left 左侧全部小于 xxleft 自身是首个不小于 xx 的位置。因此若 a[left]==x,它必为第一次出现;若不相等,则不存在 xx

    复杂度

    • 每次查询时间复杂度:O(logn)O(\log n)
    • 总时间复杂度:O(qlogn)O(q\log n)
    • 额外空间复杂度:O(1)O(1)

    易错点

    • 题目要第一次出现的位置,不是任意一个位置;
    • 输出位置从 11 开始;
    • 二分结束后必须检查是否真的等于 xx
    • 要覆盖 xx 小于最小值、大于最大值和全数组相等的情况。
    • 1

    信息

    ID
    CJBS01
    时间
    2000ms
    内存
    256MiB
    标签
    递交数
    12
    已通过
    4
    上传者