文章

83

粉丝

0

获赞

0

访问

2.9k

头像
2018年(408)计算机学科专业基础综合试题 - 第41题回答
数据结构
发布于2025年12月3日 18:10
阅读数 14


评分及理由

(1)得分及理由(满分3分)

学生给出的基本设计思想是:创建一个大小为原数组最大正整数的辅助数组,初始化为0,然后遍历原数组,将正整数映射到辅助数组对应位置标记为1,最后遍历辅助数组找到第一个0的位置,其下标加1即为未出现的最小正整数。该思路在逻辑上是正确的,能够解决问题,但效率不如标准答案高(标准答案在原数组上操作,空间复杂度O(1),而学生方法需要额外数组)。根据评分要求,思路正确不扣分,因此本部分得3分。

(2)得分及理由(满分8分)

学生根据设计思想给出了C语言代码实现。代码基本实现了所述思路,但存在以下问题:
1. 当原数组最大正整数很大但数组长度n很小时(例如数组为{1000000}),辅助数组B[max]会占用大量空间,且时间效率降低,不符合题目“时间上尽可能高效”的要求(虽然时间复杂度仍为O(n+max),但max可能远大于n)。
2. 代码中最后修改了变量max的值并返回,这改变了max原本的含义(最大正整数),虽然不影响结果但不够清晰。
3. 当原数组中所有正整数都连续出现时,例如数组{1,2,3},max=3,辅助数组B全部为1,循环结束后max未被重新赋值(因为B[u]==0不成立),此时返回的max是3,而正确答案应为4。这里存在逻辑错误:未处理“所有正整数都出现”的情况,应返回max+1(即n+1?但此处max是原数组最大值,不一定等于n)。实际上对于{1,2,3},辅助数组B长度为3,全部标记为1,循环结束未找到0,应返回4(即max+1),但代码返回的是3。
因此,由于存在逻辑错误(未正确处理全连续情况),扣分。根据代码整体实现情况,扣除3分,得5分。

(3)得分及理由(满分2分)

学生给出的时间复杂度为O(2n+2k),空间复杂度为O(k)。其中k应为max(最大正整数)。该分析基本正确,但表达不够规范(通常用O(n+max)和O(max))。考虑到分析反映了算法的主要开销,且没有原则错误,给予满分2分。

题目总分:3+5+2=10分

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发