SWE · Coding

Meta 指定值T的近邻重复:严格小于窗口大小

只判断值T是否在两个相距严格小于K的位置重复,避免把其他重复值或等于K的距离算进去。

题目重点:只判断值T是否在两个相距严格小于K的位置重复,避免把其他重复值或等于K的距离算进去。

题意与假设

这道练习题保留了面经中值得训练的核心约束,并将需要澄清的条件单独列出。现场拿到变体时,先和面试官确认这些条件。

  • 下标从0起;必须两个不同位置且值都等于T;距离严格<K。K<=1没有可能的合法重复。
  • 这不是任意值重复的标准nearby duplicate,也不是距离<=K;以明确示例为准。

解题路线

  1. 只保存上一次T的下标。再次遇到T时,与最近位置的距离是当前T到此前所有T的最小距离;若它也不满足,更早位置均不满足。
  2. 不需保存窗口中全部值或建立set,因为题目只关注一个指定值。其他数字重复与答案无关。
  3. 无论判断是否成立,都更新最近T位置;若保留首次T会漏掉后续靠得更近的一对。

手动走一遍

[1,3,6,1,4,3],K=5/T=3,位置1与5差4返回true;[2,4,1,2,5],K=3/T=2差3返回false。

Python 参考实现

下面的代码按上文假设实现,适合本地运行并追加自己的测试用例。

代码区可横向滚动;使用键盘时,先聚焦代码区再按方向键查看。

def nearby_target_duplicate(values, k, target):
    """Only repetitions of target count; distance is strictly less than k."""
    previous = None
    for i, value in enumerate(values):
        if value == target:
            if previous is not None and i - previous < k:
                return True
            previous = i
    return False

复杂度

O(n)时间,O(1)辅助空间,可处理数据流并立即早停。

易错点与追问

容易失分的边界

  • 将<写成<=会违背距离等于K的反例。
  • 把所有值放set会因非T重复错误返回true。

继续深挖

  • 若查询很多不同T且同K,可保存每值最近下标,单次扫描找到满足条件的值集合。
  • 若要求输出全部合法pairs,可能O(n²)输出;保留最近下标不够。
✓已复制微信号!