238除自身以外数组的乘积
题目链接:
https://leetcode.cn/problems/product-of-array-except-self/description/解法一:暴力解法
直接遍历一遍数组,求该数组的除该数之外的乘积,但是超时时间复杂度为n方。
vector<int> productExceptSelf(vector<int>& nums) {//遍历数组,求i下标之前的积,求i下标之后的积vector<int>arr;for (int i = 0; i < nums.size() ; i++){int ji = 1;for (int j = 0; j < nums.size() ; j++){if (j != i){ji = ji * nums[j];}}arr.push_back(ji);}return arr;}
所以我们开始优化,前缀和可以试一下,创建arr1数组先求前缀之积,第一位特殊处理为1,
创建arr2数组求后缀之积,最后一位特殊处理。
有了前缀之积和后缀之积,进行遍历
ans[i]=arr1[i]*arr2[i];求出答案请看代码
//先求前缀积,再求后缀积,最后相乘vector<int>arr1(nums.size());vector<int>arr2(nums.size());//特殊处理arr1的第一位和arr2的最后一位、arr2[nums.size() - 1] = 1;arr1[0] = 1;//前缀积for (int i = 1; i < nums.size(); i++){arr1[i] = arr1[i - 1] * nums[i - 1];}//后缀积for (int i = nums.size() - 2; i >= 0; i--){arr2[i] = arr2[i + 1] * nums[i + 1];}vector<int>ans;for (int i = 0; i < nums.size(); i++){ans.push_back(arr1[i] * arr2[i]);}