文章
14
粉丝
0
获赞
0
访问
1.3k
(1)维护两个变量min_val与max_val,用于存储当前最小最大值,从数组尾部开始访问,当访问到第i个元素时,先更新Max与Min,对于A[i]>0,res[i]=A[i]*max_val;A[i]<=0,res[i]=A[i]*min_val;遍历完成即得到结果。
(2)
void calMulMax(int A[], int res[], int n) {
if (n <= 0) return; // 处理空数组情况
// 初始化:处理最后一个元素
int max_val = A[n-1]; // 当前子数组A[i..n-1]的最大值
int min_val = A[n-1]; // 当前子数组A[i..n-1]的最小值
res[n-1] = A[n-1] * A[n-1]; // 最后一个元素的乘积只能是自身相乘
// 从倒数第二个元素开始,从后向前遍历
for (int i = n-2; i >= 0; i--) {
// 更新当前子数组的最大值和最小值
if (A[i] > max_val) {
max_val = A[i]; // 发现更大的值
}
if (A[i] < min_val) {
min_val = A[i]; // 发现更小的值
}
// 根据A[i]的符号选择合适的乘数
if (A[i] >= 0) {
// 非负数:与最大值相乘得到最大乘积
res[i] = A[i] * max_val;
} else {
// 负数:与最小值相乘得到最大乘积(负负得正)
res[i] = A[i] * min_val;
}
}
return;
}
(3)时间复杂度O(n),空间复杂度O(1)
评分及理由
(1)得分...
登录后发布评论
暂无评论,来抢沙发