LeetCode 的 Triangle 题,提交提示 Runtime Error,是二维数组访问效率太低么? 求指点 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
Ryse
V2EX    程序员

LeetCode 的 Triangle 题,提交提示 Runtime Error,是二维数组访问效率太低么? 求指点

  •  
  •   Ryse 2015 年 8 月 9 日 4111 次点击
    这是一个创建于 3851 天前的主题,其中的信息可能已经有所发展或是发生改变。
    题目地址: https://leetcode.com/problems/triangle/
    修改了几次,但提交一直提示Runtime Error

    int minimumTotal(int **triangle, int numRows) {

    int row = 0;
    int col = 0;
    int current = 0;
    int *Min = malloc((numRows + 1) * sizeof(int));

    for (row = 0; row <= numRows; row++)
    {
    /* code */
    Min[row] = 0;
    }

    for (row = numRows - 1; row >= 0; row--)
    {
    /* code */
    for (col = 0; col <= row; col++)
    {
    /* code */
    current = *((int *)triangle + row * numRows + col);

    Min[col] = ((Min[col] > Min[col + 1]) ? Min[col + 1] : Min[col]) + current;
    }
    }

    return Min[0];
    }
    第 1 条附言    2015 年 8 月 10 日
    问题已解决,自身代码存在问题,没有考虑到梯形数组。
    在此特别感谢@theFool
    10 条回复    2015-08-10 23:17:45 +08:00
    chchwy
        1
    chchwy  
       2015 年 8 月 9 日
    Runtime Error 就是跑到一半 crash 了. 通常是非法指或越界了. 查一下你的存使用吧.
    theFool
        2
    theFool  
       2015 年 8 月 9 日
    数组越界了。

    而且算法本身也有问题。
    Ryse
        3
    Ryse  
    OP
       2015 年 8 月 9 日
    @chchwy @theFool
    1. 二维数组triangle[numRows][numRows], 两层for循环,0 <= row < numRows && 0 <= col <= row numRows,不会出现访问triangle数组越界
    2. Min数组申请的长度为numRows+1,可访问数组下标访问为 [0, numRows], 其中col <= row, 而row最大值为numRows-1,访问Min数组也没越界
    3. 算法思想是 bottom-to-up,
    triangle[i][j] += min(triangle[i + 1][j], triangle[i + 1][j + 1]) ,可缩减使用一个一维数组Min存贮状态

    还望指点,想了半天还是想不通,多谢
    zonyitoo
        4
    zonyitoo  
       2015 年 8 月 9 日
    RTE跟效率没有关系,是你程序跑挂了
    theFool
        5
    theFool  
       2015 年 8 月 9 日
    @Ryse
    current = *((int *)triangle + row * numRows + col);
    参数是二维指针,并不一定和你想象的二维数组一样。
    比如triangle分配的时候是用梯形数组而不是矩形数组,那就越界了。
    改为current = *(*(triangle+row)+col);或者current = triangle[row][col];


    算法没问题,扫一眼没认出缩减了,不好意思啦。
    fszaer
        6
    fszaer  
       2015 年 8 月 10 日
    @theFool +1
    按题目来讲
    triangle
    应该是
    [
    [2],
    [3,4],
    [6,5,7],
    [4,1,8,3]
    ]
    row并不是定长数组
    so......
    CHEATBEATER
        7
    CHEATBEATER  
       2015 年 8 月 10 日
    RE和访问效率无关…
    效率低的话是TLE (time limit exceed)
    目测 数组越界了,可以尝试把数组开的大一点
    proudzhu
        8
    proudzhu  
       2015 年 8 月 10 日 via Android
    Triangle 没说是二维数组啥,你这么访问就可能越界了
    catro
        9
    catro  
       2015 年 8 月 10 日
    @theFool +2
    可以用这段测试代码
    int main(int argc, const char *argv[])
    {
    int triangle_0[] = {2};
    int triangle_1[] = {3, 4};
    int triangle_2[] = {6, 5, 7};
    int triangle_3[] = {4, 1, 8, 3};
    int *triangle[] = {triangle_0, triangle_1, triangle_2, triangle_3};
    printf("Minimum is: %d\n", minimumTotal((int **)triangle, 4));
    return 0;
    }
    Ryse
        10
    Ryse  
    OP
       2015 年 8 月 10 日
    @theFool @catro @proudzhu @fszaer
    多谢各位,恩,确实是没考虑到梯形数组,想当然的以为是二维数组,修改后可以通过
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     4475 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 37ms UTC 05:48 PVG 13:48 LAX 21:48 JFK 00:48
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86