【second】Triangle

DP。O(n)的空间复杂度。时间复杂度O(n^2)

sum[i][j] = min(sum[i-1][j-1],sum[i-1][j])+triangle[i][j];  //所该式可以看出,可以用O(n)的额外空间。

求解的时候,记得从大往小求。

    int minimumTotal(vector<vector<int> > &triangle) {
        // Note: The Solution object is instantiated only once and is reused by each test case.
        if(triangle.empty())
            return 0;
        int n = triangle.size();
        vector<int> sum(n,0);
        sum[0] = triangle[0][0];
        int i,j;
        for(i=1;i<n;i++)
        {
            sum[i] = sum[i-1]+triangle[i][i]; //i->0,而不是0->i
            for(j=i-1;j>0;j--)
                sum[j] = min(sum[j-1],sum[j])+triangle[i][j];
            sum[0] = sum[0]+triangle[i][0];
        }
        int minsum = INT_MAX;
        for(i=0;i<n;i++)
            minsum = min(minsum,sum[i]);
            
        return minsum;
    }

  

posted @ 2013-10-22 22:51  summer_zhou  阅读(158)  评论(0)    收藏  举报