我正在解决一个与相邻元素的最大和有关的问题。我递归地解决了它,并试图使用制表来解决它,但没有成功。我在网上找到了一个运行完美的代码,但在那里我发现了一个例子,我们试图访问向量中的负索引。据我所知,它一定给了我一个错误,但它运行得很好。
参考代码:
int maximumNonAdjacentSum(vector<int> &nums){
int n = nums.size();
vector<int> table(n+1,0);
table[0] = nums[0];
for(int i=1;i<=n; i++){
table[i] = max(nums[i]+table[i-2],table[i-1]);
}
return table[n];
}
您可能正在Release模式下运行,该模式不会抛出"vector subscript out of range"
断言。
对于std::vector和许多其他类型的数组,运算符[]采用无符号数,这意味着有符号数将显式转换为无符号数。-1
将是0xffffffff
,-2
将是0xfffffffe
,依此类推
在这种情况下,您试图访问的项远远超出了向量的实际大小,但它恰好在可读内存区域中,因此它会给您垃圾值,而不是seg错误。