数组条件校验代码异常排查:符合条件元素计数结果不符
问题排查与修复提示
1. 数组越界访问(核心错误)
在check_cond_right_to_left函数中,循环初始值设置错误:
for (int i = N; i > cell_index; i--) {
数组的有效索引范围是0到N-1(当N=7时为0~6),这里i=N会直接访问array[7],属于越界访问,会读取到随机垃圾值,导致后续的search_cell_on_the_left检查必然失败,最终使整个元素判定为不满足条件。
修复方式:将循环初始值改为N-1:
for (int i = N - 1; i > cell_index; i--) {
2. 重复的函数声明
在函数声明区,check_cond_left_to_right被重复声明了两次:
bool check_cond_left_to_right(int array[], int cell_index); bool check_cond_left_to_right(int array[], int cell_index); // 重复声明
虽然多数编译器会忽略这个问题,但为了代码规范性,应该删除其中重复的一行。
3. 验证逻辑与题目条件的匹配
结合你的示例输入,再确认条件逻辑:
示例输入的第4个元素(索引3),左侧元素为[38,79,38],右侧为[17,79,38]。按照题目要求的两个条件:
- 条件1:左侧所有值都存在于右侧 → 左侧的38、79在右侧均有出现,满足;
- 条件2:右侧所有值都存在于左侧 → 右侧的17在左侧没有出现,这与你说的“该元素符合条件”矛盾。
这里可能存在对题目条件的理解偏差:题目是否实际要求左侧出现的所有不同值都存在于右侧,右侧出现的所有不同值都存在于左侧?如果是这样,那左侧不同值为38、79,右侧不同值为38、79、17,依然不满足;或者你需要再确认题目要求或示例的正确性。如果是条件理解有误,可考虑改用集合统计左右的唯一值,再比较两个集合是否相等来调整验证逻辑。
内容的提问来源于stack exchange,提问作者Ori Yehuda
相关产品推荐
相关产品推荐

