文章

69

粉丝

0

获赞

0

访问

10.6k

头像
2025年(408)计算机学科专业基础综合试题 - 第41题回答
数据结构
发布于2025年12月8日 16:51
阅读数 21

(1)
创建长度均为n的一维整型数组sufMax和sufMin,分别记录区间[i, n]的最大值和最小值,可以得到res[i]= max(res[i] * sufMax[i], res[i] * sufMin[i])。
即res为正数时,乘一个最大的数;当res为负数时,乘一个最小的数。
sufMax和sufMin可以优化为两个整数,表示后缀最大值和最小值。

(2)
void calMulMax(int A[], int res[], int n)
{
  int sufMAX = -n, sufMin = n; // 初始化后缀最大值和最小值
  for(int i = n - 1; i >= 0; i--) {
    sufMax = max(A[i], sufMax); // 后缀最大值
    sufMin = max(A[i], sufMin); // 后缀最小值
    res[i] = max(A[i] * sufMax, A[i] * sufMin); // 计算res[i]
  }
}

(3)
时间复杂度O(n),空间复杂度O(1)


评分及理由

(1)得分及理由(满分4分)

学生作答的基本设计思想正确:通过维护后缀最大值和最小值来计算每个A[i]与后续元素乘积的最大值,并指出当A[i]为正数时乘最大值、为负数时乘最小值。思路与标准答案一致,表述清晰。得4分。

(2)得分及理由(满分7分)

学生代码存在以下逻辑错误:
1. 变量名不一致:第3行定义sufMIN,第5行使用sufMin(大小写不一致),第6行使用sufMax(未定义)。
2. 初始化错误:sufMAX = -n, sufMin = n,用n的相反数和n本身作为极值初始化不合理,应用整型极值(如INT_MIN/INT_MAX)。
3. 更新逻辑错误:第6行sufMin = max(A[i], sufMin)应为sufMin = min(A[i], sufMin),否则无法正确维护最小值。
4. 计算逻辑不完整:第7行直接取max(A[i] * sufMax, A[i] * sufMin),未考虑A[i]正负性对选择乘数的影响(虽然数学上等价,...

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发