文章
75
粉丝
78
获赞
0
访问
4.1k

评分及理由
(1)得分及理由(满分4分)
得分:2分
理由:学生的基本设计思想是使用一个长度为n的辅助数组来统计每个元素出现的次数,然后遍历辅助数组找到出现次数大于n/2的元素。这个思路可以解决问题,但并不是题目要求的“尽可能高效的算法”。标准答案中给出了时间复杂度O(n)、空间复杂度O(1)的摩尔投票算法,而学生的算法空间复杂度为O(n),效率较低。因此扣2分。
(2)得分及理由(满分7分)
得分:3分
理由:学生的代码实现存在以下问题:
1. 函数参数定义错误:`int E[A]`应为`int A[]`或`int* A`
2. 函数逻辑错误:代码中判断条件是`B[k] > 1`,这只能找到出现次数大于1的元素,而不是大于n/2的主元素
3. 返回值错误:找到主元素后应该返回该元素值,而不是返回1
4. 没有正确判断主元素条件:缺少与n/2的比较
5. 内存泄漏:分配了内存但没有释放
代码虽然基本实现了统计频数的思想,但核心逻辑错误导致无法正确找出主元素,因此扣4分。
(3)得分及理由(满分2分)
得分:2分
理由:学生正确分析了算法的时间复杂度为O(n)和空间复杂度为O(n),这与其实现代码的复杂度一致,因此得满分。
题目总分:2+3+2=7分
登录后发布评论
暂无评论,来抢沙发