赞
踩
我们不必将所有数字的乘积除以给定索引处的数字得到相应的答案,而是利用索引左侧所有数字的乘积和右侧所有数字的乘积(即前缀与后缀)相乘得到答案。
对于给定索引 i,我们将使用它左边所有数字的乘积乘以右边所有数字的乘积。下面让我们更加具体的描述这个算法。
算法
class Solution { public: vector<int> productExceptSelf(vector<int>& nums) { // 使用两个数组来分别记录nums[i]的左边和右边的累乘结果 // 遍历到i位置时,是这两个结果的乘积 int n = nums.size(); vector<int> left_mul(n, 1); vector<int> right_mul(n, 1); vector<int> res; for (int i = 1; i < n; i++) { left_mul[i] = left_mul[i-1] * nums[i-1]; } for (int i = n-2; i >= 0; i--) { right_mul[i] = right_mul[i+1] * nums[i+1]; } for (int i = 0; i < n; i++) { res.emplace_back(left_mul[i] * right_mul[i]); } return res; } };
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。