文章
305
粉丝
0
获赞
0
访问
64.7k

评分及理由
(1)得分及理由(满分4分)
学生答案的基本设计思想与标准答案一致:从后往前遍历,维护当前子数组的最大值和最小值,根据A[i]的正负分别乘以最大值或最小值得到res[i]。思路正确,表述清晰。得4分。
(2)得分及理由(满分7分)
学生代码整体框架正确,但存在一处逻辑错误:在if(A[i]≥0)和if(A[i]<0)的两个分支内部,当更新maxa或mina时,res[i]的计算使用的是更新后的maxa或mina,这符合逻辑。然而,代码在每次迭代中先判断A[i]的正负,再根据条件更新极值,这本身没有问题。但仔细分析,标准答案的做法是:先更新极值(将当前A[i]纳入考虑),再根据A[i]的正负选择乘以当前极值。学生代码在正数分支中,若A[i]大于当前maxa,会先更新maxa再计算乘积,这相当于用A[i]乘以自身(因为此时maxa就是A[i]),结果是正确的;若A[i]不大于maxa,则乘以原来的maxa,也是正确的。负数分支同理。因此代码逻辑实际上正确,只是写法与标准答案略有不同(标准答案先统一更新极值,再计算;学生代码在分支内更新极值)。但学生代码有一个潜在问题:当A[i]为0时,按照题目示例,0属于非负数,应乘以最大值,但学生代码中if(A[i]≥0)包含0,处理正确。整体代码能够正确计算res数组,关键注释虽未给出,但代码结构清晰。因此不扣分。得7分。
(3)得分及理由(满分2分)
学生正确给出了时间复杂度O(n)和空间复杂度O(1),与标准答案一致。得2分。
题目总分:4+7+2=13分
登录后发布评论
暂无评论,来抢沙发