文章
194
粉丝
0
获赞
0
访问
27.5k

评分及理由
(1)得分及理由(满分4分)
得2分。学生的基本设计思想是:先找出整个数组的正数最大值和负数最小值,然后根据A[i]的正负分别乘以max或min。这个思路与标准答案不同,标准答案是从右向左遍历,动态维护从i到n-1的最大值和最小值。学生的思路存在逻辑错误:对于每个A[i],需要的是与A[j](j≥i)的乘积最大值,而学生找的是整个数组的最大值和最小值,忽略了j必须≥i的限制。例如,若A = [3, 2, 1],按照学生算法,max=3,res[2] = 1*3=3,但实际上A[2]只能与自身相乘,最大乘积应为1。因此,思路有缺陷,扣2分。
(2)得分及理由(满分7分)
得3分。代码实现了学生的思路,但存在以下逻辑错误:
1. 初始化max=0, min=0不正确。若数组所有正数都小于0(即没有正数),则max保持为0,导致正数乘以0的错误结果;同样,若所有负数都大于0(即没有负数),min保持为0,导致负数乘以0的错误。应初始化为合适的极值。
2. 算法逻辑错误,如(1)所述,未考虑j≥i的限制。
由于核心逻辑错误,扣4分。代码结构清晰,语法正确,给予部分基础分。
(3)得分及理由(满分2分)
得1分。学生正确给出了时间复杂度O(n)和空间复杂度O(1),但因其算法逻辑错误,时间复杂度虽正确,但算法本身不正确,故扣1分。
题目总分:2+3+1=6分
登录后发布评论
暂无评论,来抢沙发