文章
77
粉丝
0
获赞
0
访问
7.2k
评分及理由
(1)得分及理由(满分4分)
学生给出的基本设计思想是使用一个大小为n的数组B记录每个元素出现的次数,然后遍历B数组查找出现次数大于n/2的元素。这种方法虽然正确,但并不是题目要求的“尽可能高效的算法”,因为标准答案使用了更高效的摩尔投票算法(时间复杂度O(n),空间复杂度O(1)),而学生的方法空间复杂度为O(n)。但题目只要求“尽可能高效”,且学生的思路能正确解决问题,因此不扣分。但学生没有像标准答案那样分两步(候选主元素和验证),思路相对简单,但正确,得4分。
(2)得分及理由(满分7分)
学生代码实现中存在逻辑错误:在第二个循环(统计次数)中,学生使用了一个双层循环(第一次识别)或单层循环(第二次识别)。第二次识别的代码是正确的单层循环,但第一次识别有误(双层循环会导致错误,但第二次识别已纠正)。根据第二次识别结果,代码逻辑正确:初始化数组B为0,遍历A数组,对每个A[i]在B中对应位置计数,最后检查B中是否有元素计数大于n/2。但代码中有一个冗余条件判断(A[i] >= 0 && A[i] < n),题目已说明0≤a_i (3)得分及理由(满分2分) 学生正确分析了时间复杂度为O(n)和空间复杂度为O(n),与代码实现一致。得2分。 题目总分:4+7+2=13分
登录后发布评论
暂无评论,来抢沙发