题解 | #牛群重量积#

牛群重量积

https://www.nowcoder.com/practice/d3c6930f140f4b7dbf3a53dd36742193

考察知识点:字符串、遍历、乘积

题目分析

这题的主要做法就是将左边的值做一个累积,并赋值给当前的值;之后第二遍顺序将当前数值的右边都做一次累积,并和第一遍的结果相乘,就得到了最后的结果

例: [1,2,3,4,5,6,7,8,9]

1、第一次循环,i的初始值为2

当i为6时,num[i]的值是5,那么tmp_val就是tmp_val=1*2*3, 并将tmp_val赋值给tmp[i]

当i为7时,num[i]的值是6,那么tmp_val的值就是tmp_val=tmp_val*5,并将tmp_val赋值给tmp[i]

...

2、第二次循环,i的初始值是numsLen-3(从倒数第二个数值)

那么当i为7,num[i]的值为6,tmp_val为tmp_val=8*9,再乘以之前的tmp[i],就可以得到值以及i左右两边的值之外的值的乘机

...

采用的编程语言:C

完整的编码代码:如下所示

/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 
 * @param nums int整型一维数组 
 * @param numsLen int nums数组长度
 * @return int整型一维数组
 * @return int* returnSize 返回数组行数
 */
int* productExceptSelf(int* nums, int numsLen, int* returnSize ) {
    int *tmp = NULL;
    int tmp_val = 1;

    tmp = malloc(1000);
    for (int i = 0; i < (numsLen+1); i++) 	// 将tmp数组的数值全部值1,防止做乘法的时候结果都是0
        tmp[i] = 1;

  	// 第一遍顺序,将当前数值的左边的值全部都计算出来
    for (int i = 2; i < numsLen; i++) {
        tmp_val *= nums[i-2];
        tmp[i] = tmp_val;
    }

  	// 第二遍顺序,将当前数值的右边的值都算出来,保存早tmp_val内部,之后和第一遍计算的结果相乘,这一遍轮休结束就等于当前值的左边的值和右边的值的全部相乘
    tmp_val = 1;
    for (int i = (numsLen-3); i >= 0; i--) {
        tmp_val *= nums[i+2];
        tmp[i] *= tmp_val;
    }

    *returnSize = numsLen;
    return tmp;
}

面试高频TOP202解析 文章被收录于专栏

采用Java,C,Python等方法去解答面试高频TOP202题目,

全部评论

相关推荐

1 收藏 评论
分享
牛客网
牛客企业服务