这题目限制了时间复杂度和除法,否则就很简单。
先一次遍历,将遍历索引左边所有的元素乘积保存在 answer 数组中;
然后再一次遍历,将右边的元素乘积依次乘入 answer 数组对应的位置。
class Solution {
public:vector<int> productExceptSelf(vector<int>& nums) {//数组answer保存答案//answer[i] 表示 i 左侧所有元素乘积//R 为右侧所有元素乘积//answer[i] 与 R 相乘就是结果//R 需要为下一个结果,更新当前值}
};
完整代码
class Solution {
public:vector<int> productExceptSelf(vector<int>& nums) {int length = nums.size();//数组answer保存答案vector<int> answer(length);//answer[i] 表示 i 左侧所有元素乘积answer[0] = 1;for(int i = 1; i < length; i++){answer[i] = nums[i - 1] * answer[i - 1];}//R 为右侧所有元素乘积int R = 1;//answer[i] 与 R 相乘就是结果for(int i = length - 1; i >= 0; i--){answer[i] = answer[i] * R;R = nums[i] * R;}//R 需要为下一个结果,更新当前值return answer;}
};