求除了自己之外数组所有元素的乘积。
新建一个数组,每个位置保存前面所有数的乘积。
反过来,另一个数组每个位置保存后面所有数乘积。
两个数组每个位置相乘即为所求。这样时间复杂度为O(n);
为了保证O(1)space,所以上面的操作进行融合,具体见代码。
1 class Solution { 2 public: 3 vector<int> productExceptSelf(vector<int>& nums) { 4 //思路 顺序求前面所有数的乘机,再反过来, 5 int n = nums.size(); 6 vector<int> v; 7 int tmp=1; 8 v.push_back(1); 9 for(int i=1;i<n;i++) 10 { 11 tmp *= nums[i-1]; 12 v.push_back(tmp); 13 } 14 tmp = nums[n-1]; 15 for(int j=n-2;j>=0;j--) 16 { 17 v[j] *= tmp; 18 tmp *= nums[j]; 19 } 20 21 return v; 22 } 23 };
时间: 2024-12-11 17:58:12