面试经典150题 P238 除自身以外数组的乘积
时间轴
2025-10-05
init
题目:
前缀和(Prefix Sum) 是算法中最常见、最实用的“预处理技巧”之一。它可以让你 快速求任意区间的和,从而极大地加速计算。
给定一个数组:
我们定义它的 前缀和数组 prefix 为:(即前 i 个数的和)
并约定:prefix[0] = 0
这题是乘法,所以prefix[0] = 1;1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
using std::vector;
class Solution {
public:
vector<int> productExceptSelf(vector<int> &nums) {
int i;
// n>=2
int n = nums.size();
vector<int> prefix(n);
vector<int> suffix(n);
vector<int> result(n);
prefix[0] = 1;
for (i = 1; i < n; i++) {
prefix[i] = nums[i - 1] * prefix[i - 1];
}
suffix[n - 1] = 1;
for (i = n - 2; i >= 0; i--) {
suffix[i] = nums[i + 1] * suffix[i + 1];
}
for (i = 0; i < n; i++) {
result[i] = prefix[i] * suffix[i];
}
return result;
}
};
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 常想一二,不思八九!
评论