大家好,我是开车的阿Q,自动驾驶的时代已经到来,没时间解释了,快和阿Q一起上车。作为自动驾驶系统工程师,必须要有最好的C++基础,让我们来一起刷题吧。
题目考察的知识点
这道题目考察的是数组操作和数学运算。我们需要计算除了每头牛以及它前后两头牛的重量以外,其余牛的重量的乘积。
题目解答方法的文字分析
我们可以使用两个数组来存储当前牛左边所有牛的乘积和右边所有牛的乘积。最后的答案就是这两个数组对应位置的元素相乘。
具体步骤如下:
- 初始化两个数组
left
和right
,长度与输入数组nums
相同。分别表示当前位置左边所有牛的乘积和右边所有牛的乘积。 - 遍历一遍
nums
数组,计算每个位置左边所有牛的乘积,存入left
数组中。 - 遍历一遍
nums
数组,计算每个位置右边所有牛的乘积,存入right
数组中。 - 根据题目的要求,修正首尾元素的计算,然后用
left[i-1] * right[i+1]
计算除了每头牛以及它前后两头牛的重量以外,其余牛的重量的乘积。
本题解析所用的编程语言
本题解析使用 C++ 进行编程。
完整且正确的编程代码
class Solution { public: vector<int> productExceptSelf(vector<int>& nums) { int n = nums.size(); vector<int> left(n, 1); // 存储左边所有牛的乘积 vector<int> right(n, 1); // 存储右边所有牛的乘积 vector<int> result(n, 1); // 存储最终答案 int leftProduct = 1; for (int i = 0; i < n; ++i) { left[i] = leftProduct; // 存储当前位置左边所有牛的乘积 leftProduct *= nums[i]; } int rightProduct = 1; for (int i = n - 1; i >= 0; --i) { right[i] = rightProduct; // 存储当前位置右边所有牛的乘积 rightProduct *= nums[i]; } result[0]=right[1];//首牛不用考虑三个相邻,只需要考虑两个 result[n-1]=left[n-2];//尾牛不用考虑三个相邻,只需要考虑两个 for (int i = 1; i < n-1; ++i) { result[i] = left[i-1] * right[i+1]; // 计算最终答案 } return result; } };