【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;
}
浙公网安备 33010602011771号