Timeline
Timeline
2025-10-05
init
Application of Prefix Sum
Problem:
Prefix Sum is one of the most common and practical ‘preprocessing techniques’ in algorithms. It allows you to quickly find the sum of any interval, greatly speeding up calculations.
Given an array:
We define its prefix sum array prefix as: (i.e., the sum of the first i numbers)
And we agree: prefix[0] = 0
This problem involves multiplication, so prefix[0] = 1;
1234567891011121314151617181920212223242526272829 | 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; }}; |
leetcode hot 100 rewrite
1234567891011121314151617181920212223242526272829 | using std::vector;class Solution { public: vector<int> productExceptSelf(vector<int> &nums) { int i, n = nums.size(); vector<int> prefix_multiply(n); vector<int> suffix_multiply(n); vector<int> answer(n); prefix_multiply[0] = 1; for (i = 1; i < n; i++) { prefix_multiply[i] = prefix_multiply[i - 1] * nums[i - 1]; } suffix_multiply[n - 1] = 1; for (i = n - 2; i >= 0; i--) { suffix_multiply[i] = suffix_multiply[i + 1] * nums[i + 1]; } for (i = 0; i < n; i++) { answer[i] = prefix_multiply[i] * suffix_multiply[i]; } return answer; }}; |
