题解 | #构建乘积数组#

构建乘积数组

https://www.nowcoder.com/practice/94a4d381a68b47b7a8bed86f2975db46

方法一,双重循环,每一趟外循环就求出一个B[i]。在每趟外循环中,初始B[i]为1,然后避开A[i],只计算其他数的乘积。
int* multiply(int* A, int ALen, int* returnSize ) {
    int* ret = NULL;
    ret = (int*)malloc(sizeof(int) * ALen);
    *returnSize = ALen;
    int i = 0, j = 0; 
    for(i = 0; i<ALen; i++){
        ret[i] = 1;
        for(j = 0; j<ALen;j++){
            if(j != i)
                 ret[i] *= A[j];
        }   
    }
    return ret;
方法二;将B[i]分成前部分和后部分的乘积。
int* multiply(int* A, int ALen, int* returnSize ) {
    int * B = NULL;
    B = (int*)malloc(sizeof(int) * ALen);
    *returnSize = ALen;
    int i = 0, tmp = 1;
    B[0] = 1;  //计算B[1]的前部分时用到
    for(i = 1; i < ALen; i++)  //从前往后计算前部分
        B[i] = B[i-1] * A[i-1];
    //上面for循环结束时,B[i]均只完成了前部分的乘积
    for(i = ALen - 1; i >= 0; i--){
        B[i] = B[i] * tmp;   //tmp为每个B[i]的后部分,初始B[n-1]=1
        tmp = tmp * A[i];   //从B[n-1]到B[0]的后部分是不断增多的
    }
    return B;
}



全部评论

相关推荐

昨天 11:03
门头沟学院 Java
点赞 评论 收藏
分享
08-15 11:57
门头沟学院 Java
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务