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

C语言:修复有序数组最长相同值序列查找函数问题

修复C函数以找出有序数组中最长连续相同值序列

原代码存在的问题

  1. 末尾序列未处理:如果最长连续序列出现在数组最后一段,循环内不会触发更新逻辑,导致结果错误。
  2. 序列长度重置错误:遇到不同元素时,curr_max被设为0,正确应该重置为1(下一个元素本身是新序列的第一个)。
  3. 空数组越界:未处理size=0的情况,会直接访问arr[0]导致内存越界。
  4. 逻辑遗漏:仅在当前序列比最大值长时才更新,但循环结束后没有检查最后一段序列的长度。

修复后的代码

int MaxSequence(const int arr[], int size, int* number)
{
    // 处理空数组边界
    if (size == 0) {
        *number = 0; // 可根据需求调整默认值
        return 0;
    }

    int max_len = 1;
    int curr_len = 1;
    *number = arr[0];

    for (int i = 0; i < size - 1; i++) {
        if (arr[i] == arr[i+1]) {
            curr_len++;
        } else {
            // 检查当前序列是否为更长序列
            if (curr_len > max_len) {
                max_len = curr_len;
                *number = arr[i];
            }
            // 重置当前序列长度为1(新序列的第一个元素)
            curr_len = 1;
        }
    }

    // 循环结束后检查最后一段序列
    if (curr_len > max_len) {
        max_len = curr_len;
        *number = arr[size - 1];
    }

    return max_len;
}

关键修复说明

  • 空数组处理:先判断数组是否为空,避免非法内存访问。
  • 末尾序列检查:循环结束后额外判断最后一段连续序列的长度,确保不会遗漏最长序列。
  • 长度重置修正:遇到不同元素时,将当前序列长度重置为1,符合新序列的起始逻辑。
  • 可读性优化:变量名改为max_len和curr_len,更直观表达含义。

测试验证

  • 输入数组{1,1,2,2,2,3}:返回长度3,number指向2(正确识别末尾的最长序列)。
  • 输入数组{5,5,5}:返回长度3,number指向5(修复原代码循环内无更新的问题)。
  • 输入空数组:返回0,number设为0(避免越界)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 07:35:10