leetcode 238.除自身以外数组的乘积
leetcode238 题解
思路:先计算nums[i]左侧乘积(由0–>nums.size(),后计算i右侧乘积(由nums.size()–>0) (参考官方题解思路)
class Solution {
public:
vector<int> productExceptSelf(vector<int>& nums) {
int length = nums.size();
vector< int > ans (length);
ans[0] = 1;
for (int i = 1; i < length; i++)
{
ans[i] = nums[i-1] * ans[i-1];
}
int R = 1;
for (int i = length - 1; i >= 0; i--)
{
ans[i] = ans[i] * R;
R = R * nums[i];
}
return ans;
}
};
提交问题及解决
Error: AddressSanitizer: heap-buffer-overflow on address 0x602000000080 at pc 0x00000038eca0 bp 0x7ffd5d778020 sp 0x7ffd5d778018
✘ Error: =================================================================
==45==ERROR: AddressSanitizer: heap-buffer-overflow on address 0x602000000080 at pc 0x00000038eca0 bp 0x7ffd5d778020 sp 0x7ffd5d778018
READ of size 4 at 0x602000000080 thread T0
问题for (int i = length; i >= 0; i–) vector超出了初始化vector< int > ans (length)空间限制;