文章
216
粉丝
1
获赞
100
访问
43.0k

评分及理由
(1)得分及理由(满分3分)
学生给出的基本设计思想是使用一个长度为 n+1 的辅助数组 B 来记录给定数组中大于等于1的正整数是否出现,然后遍历 B 查找第一个未出现的正整数。该思路正确,能够解决问题,且时间复杂度为 O(n),空间复杂度为 O(n)。虽然与标准答案(原地哈希,空间 O(1))不同,但根据评分要求“思路正确不扣分”,因此不扣分。得3分。
(2)得分及理由(满分8分)
学生提供了两种识别结果(Go 和 C 语言),核心逻辑一致。算法步骤清晰:初始化辅助数组 B 为0;遍历原数组 A,若 A[i] 为正整数且 B 中对应位置为0,则标记为1;最后从1开始遍历 B,找到第一个标记不为1的位置即为结果。代码逻辑正确,能够处理示例情况。但存在以下小问题:
1. 第一次识别结果中函数声明语法不完整(缺少返回类型),第二次识别结果中函数返回类型为 int,但函数体在最后缺少返回 n+1 的情况(当数组中出现了1到n的所有正整数时,应返回 n+1)。这是一个逻辑遗漏,会导致某些输入无法得到正确结果(例如数组 {1,2,3} 应返回4,但该代码在遍历完 B 后没有返回值,行为未定义)。
2. 辅助数组 B 的长度为 n+1,但下标只用到 1 到 n,对于 A[i] 的值可能超过 n 的情况,代码中通过 if (A[i] > 0) 判断,但若 A[i] > n,则 B[A[i]] 会越界访问,这是一个潜在的错误。
根据评分要求,逻辑错误需要扣分。第一个问题(缺失返回 n+1 的情况)属于逻辑不完整,扣2分;第二个问题(数组越界风险)在题目给定条件下(未说明数组元素范围)可能引发错误,但学生代码中通过 if (A[i] > 0) 判断,实际上若 A[i] > n,B[A[i]] 会越界,但题目可能默认数组元素值合理,且标准答案也未特别处理该情况,因此酌情扣1分。总计扣3分。
其余部分正确,注释清晰。得5分。
(3)得分及理由(满分2分)
学生正确分析了时间复杂度 O(n) 和空间复杂度 O(n),与算法一致。得2分。
题目总分:3+5+2=10分
登录后发布评论
暂无评论,来抢沙发