题目:
前缀和(Prefix Sum) 是算法中最常见、最实用的“预处理技巧”之一。它可以让你 快速求任意区间的和,从而极大地加速计算。
给定一个数组:
$$
nums = [a₁, a₂, a₃, …, aₙ]
$$
我们定义它的 前缀和数组 prefix 为:(即前 i 个数的和)
$$
prefix[i] = a₁ + a₂ + … + aᵢ
$$
并约定: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
| #include <vector> using std::vector;
class Solution { public: vector<int> productExceptSelf(vector<int> &nums) { int i; 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; } };
|