面试算法总结:动态规划3

11 篇文章 0 订阅
4 篇文章 0 订阅

这里再来两个动态规划的经典题目。
题目一:一维数组的最大连续子序列。
这哥可以说是动态规划入门了,主要就是运用了*‘0’*,这个不多说,直接上代码。

int max = Integer.MIN_VALUE;
dp[0] = a[0]; 
for(int i=1;i<n;i++){
    if(dp[i-1]<0){
        dp[i] = a[i];
    }else{
        dp[i] = dp[i-1]+a[i];
    }
    max = Math.max(dp[i],max);
}
return max;

这个很简单,不多说,下面说说升级版:树上的最大路径。
题目连接在这里
二叉树中的最大路径和 leetcode 124
AC代码如下:

	//二叉树建树,可以理解为层次遍历建树
    void buildTree(){
        TreeNode node = new TreeNode(a[0]);
        build(a, node, 0);
    }

    public void build(int[] x, TreeNode node, int pos) {
        if (pos >= x.length)
            return;
        if (2 * pos + 1 < x.length) {
            TreeNode left = new TreeNode(x[2 * pos + 1]);
            node.left = left;
            build(x, left, 2 * pos + 1);
        }
        if (2 * pos + 2 < x.length) {
            TreeNode right = new TreeNode(x[2 * pos + 2]);
            node.right = right;
            build(x, right, 2 * pos + 2);
        }
    }

    public int maxPathSum(TreeNode root) {
        if (root == null)
            return 0;
        dfs(root);
        return maxi;
    }

    int maxi = Integer.MIN_VALUE;

    private int dfs(TreeNode root) {
        if (root == null)
            return 0;
        int left = 0, right = 0;
        if (root.left != null) {
            left = dfs(root.left);
        }
        if (root.right != null) {
            right = dfs(root.right);
        }
        int returnVal = root.val;
        int leftV = left + root.val;
        int rightV = right + root.val;
        returnVal = Math.max(returnVal, leftV);
        returnVal = Math.max(returnVal, rightV);
        maxi = Math.max(maxi, returnVal);
        maxi = Math.max(maxi, left + right + root.val);
        return returnVal < 0 ? 0 : returnVal;//这里注意返回时,路径要连续
    }
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值