joshua分享:直接自顶向下计算,计算完后最后一行的数据筛选出的最小值就是答案

triangle

http://www.nowcoder.com/questionTerminal/2b7995aa4f7949d99674d975489cb7da

不需要额外的空间,时间复杂度O(1/2 * N^2);

class Solution {
public:
    int minimumTotal(vector<vector<int> > &triangle) {
        int n = triangle.size(), ans = 0x7fffffff;

        if(n == 1) return triangle[0][0];
        for(int i = 1; i < n; i++) {
            for(int j = 0; j <= i; j++) {
                if(j == 0) triangle[i][j] += triangle[i-1][j];
                else if(j == i) triangle[i][j] += triangle[i-1][j-1];
                else {
                    triangle[i][j] += min(triangle[i-1][j], triangle[i-1][j-1]);
                }
            }
        }
        for(int j = 0; j < n; j++) 
            ans = min(ans, triangle[n-1][j]);
        return ans;
    } 
};
全部评论
请问 triangle[i][j] += min(triangle[i-1][j], triangle[i-1][j-1]);这一步中为什么不需要考虑上一行中右相邻位置?求指教
点赞 回复 分享
发布于 2020-05-10 20:54
[i-1,j-1]是中上左,[i-1,j]是中上右
点赞 回复 分享
发布于 2020-05-18 00:28

相关推荐

2024-12-26 20:46
复旦大学 C++
国棉17厂丶小王:拿了offer的那个周末晚上去网吧通宵,去网吧不知道玩什么刷了lc的每日一题,然后试着第一次打开了三角洲行动,从此少了一个已经刷了700道题的lc用户,但是烽火地带多了一只🐭🐭
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务