Redian新闻
>
leetcode 的 triangle 一题 oj 怎么不过
avatar
leetcode 的 triangle 一题 oj 怎么不过# JobHunting - 待字闺中
p*o
1
41 / 43 test cases passed.
Status: Wrong Answer

Input: [[-9],[-8,0],[-3,2,5],[6,3,0,-4],[-2,-9,-5,-8,6],[0,-5,0,-2,-1,5]
,[0,6,-1,-5,-8,6,-5],[-8,-5,-9,-8,-4,-3,-5,7]]
Output: -1217805963
Expected: -41
code:
class Solution {
public:
int minimumTotal(vector > &triangle) {
// Start typing your C/C++ solution below
// DO NOT write int main() function

int n = triangle.size();
vector vmin(n, 0);
while (n--){
for (int i=0; i<=n; i++){
vmin[i]=triangle[n][i]+min(vmin[i], vmin[i+1]);}
}
return vmin[0];
}
};
但我自己算出来的是-41.
int main(){
// [[-9],[-8,0],[-3,2,5],[6,3,0,-4],[-2,-9,-5,-8,6],[0,-5,0,-2,-1,5],[0,
6,-1,-5,-8,6,-5],[-8,-5,-9,-8,-4,-3,-5,7]]
int x1[1] = { -9 };
int x2[2] = { -8,0 };
int x3[3] = { -3,2,5 };
int x4[4] = { 6,3,0,-4 };
int x5[5] = { -2,-9,-5,-8,6 };
int x6[6] = { 0,-5,0,-2,-1,5 };
int x7[7] = { 0,6,-1,-5,-8,6,-5 };
int x8[8] = { -8,-5,-9,-8,-4,-3,-5,7};
VI v1(x1, x1 + sizeof x1 / sizeof x1[0]);
VI v2(x2, x2 + sizeof x2 / sizeof x2[0]);
VI v3(x3, x3 + sizeof x3 / sizeof x3[0]);
VI v4(x4, x4 + sizeof x4 / sizeof x4[0]);
VI v5(x5, x5 + sizeof x5 / sizeof x5[0]);
VI v6(x6, x6 + sizeof x6 / sizeof x6[0]);
VI v7(x7, x7 + sizeof x7 / sizeof x7[0]);
VI v8(x8, x8 + sizeof x8 / sizeof x8[0]);
VVI vvi;
vvi.push_back(v1);
vvi.push_back(v2);
vvi.push_back(v3);
vvi.push_back(v4);
vvi.push_back(v5);
vvi.push_back(v6);
vvi.push_back(v7);
vvi.push_back(v8);
Solution s;
int i = s.minimumTotal(vvi);
// print out -41 as expected
printf("min total is %dn", i);
}
avatar
h*g
2
i<=n
vmin[n+1] 越界了吧?
avatar
p*o
3
恩, 的确是越界了。 我如果把下面的改成
vector vmin(n+1, 0);
就全通过了。
但是好奇怪,越界的话, 为什么我本地机器跑没问题?
而且在leetcode上小的测试集全过了,大的测试集过了41个(out of 43).
如果越界的话,应该segmentation fault,一个都过不了啊。
请牛人指点。

【在 h****g 的大作中提到】
: i<=n
: vmin[n+1] 越界了吧?

avatar
b*m
4
Undefined behavior,不一定是segmentation fault吧。

【在 p****o 的大作中提到】
: 恩, 的确是越界了。 我如果把下面的改成
: vector vmin(n+1, 0);
: 就全通过了。
: 但是好奇怪,越界的话, 为什么我本地机器跑没问题?
: 而且在leetcode上小的测试集全过了,大的测试集过了41个(out of 43).
: 如果越界的话,应该segmentation fault,一个都过不了啊。
: 请牛人指点。

avatar
h*g
5
C++并不检查数组越界,程序员可以访问数组之外的内存, 如果这个内存是合法的,编
译运行都不会报错,这属于undefined behavior,这种错误很难发现。有的时候这个数
组之外的内存是受保护的或者是非法的,那就会引起segmentation fault。 因此C++数
组越界 在不同的机器上可能会有不同的结果。

【在 p****o 的大作中提到】
: 恩, 的确是越界了。 我如果把下面的改成
: vector vmin(n+1, 0);
: 就全通过了。
: 但是好奇怪,越界的话, 为什么我本地机器跑没问题?
: 而且在leetcode上小的测试集全过了,大的测试集过了41个(out of 43).
: 如果越界的话,应该segmentation fault,一个都过不了啊。
: 请牛人指点。

相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。