题目描述
解法 左右分区
class Solution {
public:
vector<int> constructArr(vector<int>& a) {
int len = a.size();
if(len == 0) return {};
vector<int> ans(len, 0);
vector<int> left(len, 0);
vector<int> right(len, 0);
//第一个解的左边数组之合不存在和最后一个解的右边数组之合不存在
left[0] = right[len - 1] = 1;
for(int i = 1; i < len; i ++) left[i] = left[i - 1] * a[i - 1];
for(int i = len - 2; i >= 0; i --) right[i] = right[i + 1] * a[i + 1];
for(int i = 0; i < len; i ++) ans[i] = left[i] * right[i];
return ans;
}
};
时间复杂度O(N)
空间复杂度O(N)