个人主页:兜里有颗棉花糖
欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 兜里有颗棉花糖 原创
收录于专栏【手撕算法系列专栏】【leetcode】
🍔本专栏旨在提高自己算法能力的同时,记录一下自己的学习过程,希望对大家有所帮助
🍓希望我们一起努力、成长,共同进步。
给你一个整数数组 nums
,返回 数组 answer
,其中 answer[i]
等于 nums
中除 nums[i]
之外其余各元素的乘积 。
题目数据 保证 数组 nums
之中任意元素的全部前缀元素和后缀的乘积都在 32
位 整数范围内。
请 不要使用除法,且在 O(n)
时间复杂度内完成此题。
示例1:
输入: nums = [1,2,3,4]
输出: [24,12,8,6]
示例2:
输入: nums = [-1,1,0,-3,3]
输出: [0,0,9,0,0]
注意:
nums
之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内状态表示:
l[i]
:表示i
下标左边所有元素乘积之积(即[0,i - 1]
之间所有元素的乘积)。r[i]
:表示i
下标右边所有元素乘积之积(即[i + 1,n - 1]
之间所有元素的乘积)。前缀积和后缀积表达式:
l[i] = l[i - 1] * nums[i - 1]
r[i[ = r[i + 1] * nums[i + 1]
class Solution {
public:
vector<int> productExceptSelf(vector<int>& nums) {
int n = nums.size();
vector<int> l(n),r(n);
l[0] = 1,r[n - 1] = 1;
for(int i = 1;i < n;i++) l[i] = l[i - 1] * nums[i - 1];
for(int i = n - 2;i >= 0;i--) r[i] = r[i + 1] * nums[i + 1];
vector<int> answer(n);
for(int i = 0;i < n;i++) answer[i] = l[i] * r[i];
return answer;
}
};
最后就通过啦!!!