如何通过改进顺序搜索算法查找数组中指定出现次数的元素及索引
代码问题排查及修复
现有代码存在的核心问题
- 错误的提前退出逻辑:第一个遍历循环中,
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
相关产品推荐
相关产品推荐

