文章
281
粉丝
40
获赞
2
访问
23.8k
void CallMulMax(int A[], int res[],int n){
for(int i = 0; i< A.size(); i++){
int max_val = 0;
int imax_val = 0;
if(A.[i] > 0 && A[i] > max_val){
max_val = A.[i];
res[i] = A.[i]*max_val;
}
if(A.[i] < 0 && abs(A[i]) > abs(imax_val)){
imax_val = A.[i];
res[i] = A.[i]*imax_val;
}
if(A.[i] = 0)res[i] = 0;
}
}
时间复杂度是O(n),空间复杂度是O(1)
算法思想:
当A[i]是大于0的,那么res[i]的最大值 = A[i]乘以A[0]~A[i]中的正数最大值
当A[i]是小于0的,那么res[i]的最大值 = A[i]乘以A[0]~A[i]中的负数最小值
当A[i]是等于0的,那么res[i]乘以任何数的结果都是0
所以在确定res[i]的最值时,只需维护每一轮中的正负数绝对值最大值即可,再更新res[i]的最值
评分及理由
(1)得分及理由(满分4分)
得分:0分
理由:学生给出的算法思想存在根本性错误。题目要求计算A[i]与A[j](i≤j≤n-1)乘积的最大值,即对于每个位置i,需要找到从i到末尾的最大乘积。但学生的思路是寻找A[i]与A[0]~A[i](即i之前)的元素乘积的最大值,这与题目要求完全相反。此外,学生没有理解需要同时维护最大值和最小值来处理负数相乘的情况,思路描述不完整且方向错误。
(2)得分及理由(满分7分)
得分:0分
理由:代码存在多处严重错误:
1. 语法错误:使用`A.size()`(应为n)、`A.[i]`(应为A[i])等错误语法。
2. 逻辑错误:循环内每次重置max_val和imax_val为0,无法正确记录历史极值;比较对象错误(应为i到n-1而非0到i);未考虑A[i]与后续元素乘积的所有情况(如正数乘负数最小值等)。
3. 功能错误:代码完全无法实现题目...
登录后发布评论
暂无评论,来抢沙发