动态规划——triangle空间复杂度O(n)

来源:互联网 发布:java首页登录开发注意 编辑:程序博客网 时间:2024/06/03 17:10

仍是数字三角形问题,求从三角形顶端到最底层最小路径和。

题目要求空间复杂度O(n),那么就要将二维数组压缩为一维。因DP中历史状态只能通过当前状态影响下一个状态,所以压缩数组是可行的。

数字三角形如下:

[     [2],    [3,4],   [6,5,7],  [4,1,8,3]]


import java.util.*;public class Solution {    public int minimumTotal(ArrayList<ArrayList<Integer>> triangle) {        if(triangle == null||triangle.size() == 0)            return 0;                //int [][]temp=new int [triangle.size()][triangle.size()];        //压缩数组temp:        int []temp=new int[triangle.size()];        for(int col=0;col<triangle.size();col++)            {            temp[col]=triangle.get(triangle.size()-1).get(col);        }                for(int i=triangle.size()-2;i>=0;i--)            {            for(int j=0;j<=i;j++)                {                int min= temp[j]<temp[j+1]?temp[j]:temp[j+1];                temp[j]=min+triangle.get(i).get(j);            }        }        return temp[0];    }}



0 0