Applied Research / AI Engineer · 70 分钟 OA

Capital One Sawtooth Sequence:奇偶交替子数组计数

Applied Research OA 给完整例子:连续子数组中相邻数字奇偶不同,单元素有效;用当前合法后缀长度线性计数。

题目重点:Applied Research OA 给完整例子:连续子数组中相邻数字奇偶不同,单元素有效;用当前合法后缀长度线性计数。

题意与假设

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

  • 数组整数可正、负或零,奇偶按 value mod 2 判;结果可能超过 32 位,使用足够宽整数。
  • 子数组必须连续且长度≥1;同值出现不同下标时按位置计不同子数组。
  • 空数组返回 0;题目没有额外最大长度或取模要求。

解题路线

  1. 扫描数组,定义 run_i 为以 i 结尾且奇偶交替的最长后缀长度。
  2. i=0 时 run=1;若 arr[i] 与 arr[i−1] 奇偶不同,run=run+1,否则 run=1。以 i 结尾的有效子数组恰有 run 个起点,累加到答案。
  3. 正确性:最长合法后缀内任意后缀仍合法,之前一格若同奇偶则所有跨越该边界的子数组都不合法,因此数量正好等于 run。
  4. 测试全同奇偶、全交替、单元素、负数、0、局部断点和大 n 的整数溢出。

手动走一遍

[1,2,3,7,6,5] 的 run 依次为 [1,2,3,1,2,3],总数 12;[1,2,1,2,1] 为 [1,2,3,4,5],总数 15。若 [1,3,5,7,9] 全奇,run 每步重置为 1,答案 5。

规模与取舍

n 个数字单次扫描 O(n) 时间;只保留上一个奇偶、run 与 sum,O(1) 额外空间。

易错点与追问

容易失分的边界

  • 漏计单元素子数组。
  • 在断点时把 run 清零而不是重置为 1。
  • 用绝对值或语言负数 `%` 规则不当,导致负数奇偶错判;可用与 1 位。
  • 枚举所有 O(n²) 子数组在大输入超时。

继续深挖

  • 要求长度至少 2 时如何改累计式?
  • 在线追加数字时能否 O(1) 更新?
  • 如果允许最多一次同奇偶相邻,滑动窗口如何设计?
✓已复制微信号!