题目描述
知识点
数组
结果
实现
码前思考
- 题中有要求在不使用除法的前提下,保持时间复杂度为 O ( n ) O(n) O(n);
- 一下子就要想到传统艺能:维护两个数组,分别保存自左往右累乘和自右往左累乘的结果。最后返回的结果就是两个数组对应元素的乘积;
- 关于附加条件——不要使用额外的空间。可以看代码里是怎么写的~
代码实现
//【从左往右】遍历一次和【从右往左】遍历一次
class Solution {
public:
vector<int> productExceptSelf(vector<int>& nums) {
if(nums.size()==0){
return vector<int>();
}
vector<int> res(nums.size(),1);
res[0] = 1;
for(int i=1;i<nums.size();i++){
res[i] = nums[i-1]*res[i-1];
}
int rTol = 1;
for(int i=nums.size()-1;i>=0;i--){
res[i] = res[i] * rTol;
rTol *= nums[i];
}
return res;
}
};
码后反思
- 其实这个题目跟最基本的 求和 的那个题目是一毛一样的。。。
- 官方题解跟我的差不多。