文章
37
粉丝
0
获赞
3
访问
1.1k

评分及理由
(1)得分及理由(满分4分)
学生给出的算法思想是使用计数数组统计每个元素的出现次数,然后找到出现次数最多的元素并判断是否超过n/2。这种方法虽然正确,但空间复杂度为O(n),而题目要求"尽可能高效的算法",标准答案给出了空间复杂度O(1)的更优解法。不过题目并未明确要求空间复杂度必须为O(1),且学生的思路是正确可行的。根据评分说明"算法的基本设计思想描述或算法实现中部分正确,根据算法复杂度酌情给分",此处扣1分,得3分。
(2)得分及理由(满分7分)
学生代码实现基本正确,但存在以下问题:
1. 代码中max变量在比较时没有更新,应在if(count[i]>max)后添加max = count[i];,这是一个逻辑错误,扣2分。
2. 数组初始化int count[n] = 0;在C/C++中语法不正确,应为int count[n] = {0};,但考虑到可能是识别错误,不扣分。
3. 代码逻辑清晰,注释恰当,基本实现了算法思想。
综合扣2分,得5分。
(3)得分及理由(满分2分)
学生正确分析了算法的时间复杂度O(n)和空间复杂度O(n),与实现的算法一致,得2分。
题目总分:3+5+2=10分
登录后发布评论
暂无评论,来抢沙发