int trap(vector<int>& height) {
int n=height.size();
vector<int> left;
vector<int> right;
left[0]=height[0];
for(int i=0;i<n;i++)
{
left[i]=max(left[i-1],height[i]);
}
right[n-1]=height[n-1];
for(int i=n-2;i>=0;i--)
{
right[i]=max(right[i+1],height[i]);
}
int ans=0;
for(int i=0;i<n;i++)
{
ans+=min(left[i],right[i])-height[i];
}
return ans;
}
};
我做这个代码是为了解决雨水问题,但它显示了上面的错误idk如何解决,我被这个卡住了
使用
vector<int> left;
vector<int> right;
创建两个空向量。对它们的任何索引都将超出的范围,并导致未定义的行为。要么设置它们的大小:
vector<int> left(n);
vector<int> right(n);
或者使用push_back
动态添加值。
还要注意,当i == 0
时,left[i-1]
也会导致UB(未定义的行为(。这发生在循环的第一次迭代中。您可能应该用int i = 1
开始这个循环。