题解 | #牛群重量积#
牛群重量积
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题目,