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

如何通过改进顺序搜索算法查找数组中指定出现次数的元素及索引

代码问题排查及修复

现有代码存在的核心问题

  • 错误的提前退出逻辑:第一个遍历循环中,else if (count == 0) 分支只要遇到第一个不等于目标值k的元素就会直接判定元素不存在并返回,完全没有遍历后续元素,比如目标值不在数组首位时会直接误判不存在。
  • 第二个循环逻辑完全错误:第二个循环直接对比参数occ和数组索引i,和目标值的出现次数没有任何关联,根本无法定位到第occ次出现目标值的索引位置。
  • 缺失边界校验:没有判断目标值总的出现次数是否小于用户要求的occ,比如目标值总共只出现2次,用户要求查第3次时没有错误提示。
  • 函数返回值不完整:声明为int返回类型的函数没有覆盖所有分支的return逻辑。

修复后的改进顺序搜索实现

改进点:单次遍历完成统计和定位,找到目标后直接终止遍历,不需要走完全数组,符合顺序搜索优化要求:

int findOccurrence(int arr[], int n, int occ, int k)
{
    int count = 0;
    int target_index = -1;
    for(int i = 0; i < n; i++)
    {
        if(arr[i] == k)
        {
            count++;
            // 匹配到第occ次出现时记录索引,直接退出循环
            if(count == occ)
            {
                target_index = i;
                break;
            }
        }
    }
    // 统一输出结果
    if(count == 0)
    {
        printf("Value %d not found in the array.", k);
        return 0;
    }
    else if(target_index == -1)
    {
        printf("Value %d only occurred %d times, less than the required %d times.", k, count, occ);
        return 0;
    }
    else
    {
        printf("The value %d has an occurrence of %d at index %d", k, occ, target_index);
        return 1;
    }
}

效果验证

输入示例:数组{5, 6, 5, 3, 5},occ=2、k=5时,输出完全符合预期:The value 5 has an occurrence of 2 at index 2。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 01:27:00