You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

OM与ADDY最长非零连续Streak计算结果异常排查

问题排查与修复

首先明确测试用例的正确最长连续非零Streak:

  • OM的数组[1,7,3,0,2,13]:最长连续非零段为前3个元素,长度3
  • ADDY的数组[0,2,3,4,5,0]:最长连续非零段为中间4个元素,长度4
    程序输出DRAW说明代码计算出的两个最长值相等,大概率是ADDY的Streak被错误计算为3,以下是核心错误点排查及修复方案:

常见错误点及修复

1. 遇0时的处理顺序错误

这是最可能导致问题的原因:如果代码先重置当前Streak计数,再更新最大值,会导致连续非零段的长度还没来得及和最大值比较就被清零。

错误示例:

// 处理ADDY数组的错误逻辑
int current_b = 0, max_b = 0;
for (int i = 0; i < n; i++) {
    if (b[i] != 0) {
        current_b++;
    } else {
        // 错误:先重置计数,再比较更新最大值
        current_b = 0;
        if (current_b > max_b) {
            max_b = current_b;
        }
    }
}

当处理ADDY数组最后一个0时,current_b先被置为0,再和max_b比较,此时max_b仍为3,最终两个最大值均为3,输出DRAW。

正确逻辑:

int current_b = 0, max_b = 0;
for (int i = 0; i < n; i++) {
    if (b[i] != 0) {
        current_b++;
    } else {
        // 正确:先比较更新最大值,再重置计数
        if (current_b > max_b) {
            max_b = current_b;
        }
        current_b = 0;
    }
}

2. 遍历结束后未检查最后一段连续非零序列

如果数组末尾是连续非零元素,循环结束后当前计数还未与最大值比较,会导致最大值未更新。即使你的测试用例末尾是0,也建议补上这一步以覆盖所有场景:

// 循环结束后,检查最后一段连续非零长度
if (current_b > max_b) {
    max_b = current_b;
}

3. 初始化值错误

确保计数变量和最大值变量初始化为0,避免初始值导致的计数偏差:

int current_a = 0, max_a = 0;
int current_b = 0, max_b = 0;

4. 循环边界错误

如果循环条件写成i < n-1,会漏掉最后一个元素,导致末尾的0未被处理,同样会使ADDY的最大值停留在3。需确保循环条件为i < n。

完整正确示例代码

#include <stdio.h>

int main() {
    int t = 1;
    while (t--) {
        int n = 6;
        int a[] = {1,7,3,0,2,13};
        int b[] = {0,2,3,4,5,0};
        
        int current_a = 0, max_a = 0;
        int current_b = 0, max_b = 0;
        
        // 计算OM的最长连续非零Streak
        for (int i = 0; i < n; i++) {
            if (a[i] != 0) {
                current_a++;
            } else {
                if (current_a > max_a) {
                    max_a = current_a;
                }
                current_a = 0;
            }
        }
        if (current_a > max_a) max_a = current_a;
        
        // 计算ADDY的最长连续非零Streak
        for (int i = 0; i < n; i++) {
            if (b[i] != 0) {
                current_b++;
            } else {
                if (current_b > max_b) {
                    max_b = current_b;
                }
                current_b = 0;
            }
        }
        if (current_b > max_b) max_b = current_b;
        
        // 输出结果
        if (max_a > max_b) {
            printf("OM\n");
        } else if (max_b > max_a) {
            printf("ADDY\n");
        } else {
            printf("DRAW\n");
        }
    }
    return 0;
}

内容的提问来源于stack exchange,提问作者Yash Sachdeva

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 04:47:10