文章
273
粉丝
0
获赞
1
访问
57.3k

评分及理由
(1)得分及理由(满分4分)
学生给出的算法思想是:第一遍循环找到整个数组的最大值和最小值,第二遍循环对每个A[i]计算Max*A[i]和Min*A[i]的最大值作为res[i]。这个思路与标准答案不同,标准答案是从右向左遍历并动态维护从i到n-1的最大值和最小值,然后根据A[i]的正负选择乘最大值或最小值。学生的思路虽然也能得到结果,但存在逻辑错误:对于每个A[i],需要的是与A[j](j≥i)的乘积最大值,而学生的做法使用了整个数组的最大值和最小值,这可能导致错误(例如A[i]为负数时,应该乘子数组的最小值,但学生可能乘了整个数组的最大值,导致结果不是子数组范围内的最大乘积)。因此,该算法思想不完全正确。但考虑到学生可能意图是简化处理,且部分情况下可能正确,但严格来说不符合题目要求,扣2分。得2分。
(2)得分及理由(满分7分)
学生代码实现基于上述思想,但存在以下问题:
1. 第一遍循环中,学生从后向前遍历,但维护的Max和Min是整个数组的最大值和最小值,而不是从i到n-1的最大值和最小值。这导致第二遍循环中,res[i]的计算可能错误,因为对于每个i,应该使用子数组A[i:n-1]的最大值和最小值,而不是整个数组的。
2. 代码中使用了宏定义INF,但初始值设置可能不准确(例如-INF可能不是最小整数值),但这不是主要扣分点。
3. 关键逻辑错误:没有根据A[i]的正负选择乘最大值或最小值,而是直接取Max*A[i]和Min*A[i]的最大值,这不符合题目要求(例如A[i]为负数时,应乘子数组的最小值,但学生可能乘了Max,导致结果偏小或错误)。
因此,代码逻辑错误明显,扣4分。得3分。
(3)得分及理由(满分2分)
学生正确分析了时间复杂度和空间复杂度,均为O(n)和O(1),与标准答案一致。得2分。
题目总分:2+3+2=7分
登录后发布评论
暂无评论,来抢沙发