博客
关于我
Leetcode-最短路径和+最大子串和(动态规划)
阅读量:86 次
发布时间:2019-02-26

本文共 1618 字,大约阅读时间需要 5 分钟。

解决方案

这个问题可以分为两个部分解决:寻找网格中从左上角到右下角的最小路径和,以及找出数组中的最大子串和。

1. 网格中的最小路径和

我们使用动态规划来解决网格问题。每个点的最短路径和只能来自于左边或上方,因此我们创建一个二维数组dp来记录每个点的最短路径和。

  • 初始化:dp[0][0]为网格顶点的值。
  • 边界处理:
    • 左边界(i=0,j>0):dp[0][j] = dp[0][j-1] + grid[0][j]
    • 上边界(i>0,j=0):dp[i][0] = dp[i-1][0] + grid[i][0]
  • 中间点(i>0,j>0):dp[i][j] = min(dp[i-1][j], dp[i][j-1]) + grid[i][j]

最后,dp[m-1][n-1]即为右下角的最小路径和。

2. 数组中的最大子串和

同样使用动态规划:

  • 初始化:maxansmax都为数组的第一个元素。
  • 遍历数组:每一步计算当前子串和,更新最大值。
  • max是当前子串和与单独当前元素的最大值。
  • maxans是遍历过程中的最大值。

代码实现

public class Solution {    public int minPathSum(int[][] grid) {        int m = grid.length;        if (m == 0) return 0;        int n = grid[0].length;        int[][] dp = new int[m][n];                dp[0][0] = grid[0][0];        for (int i = 0; i < m; i++) {            for (int j = 0; j < n; j++) {                if (i == 0 && j == 0) continue;                if (i == 0) {                    dp[i][j] = dp[i][j - 1] + grid[i][j];                } else if (j == 0) {                    dp[i][j] = dp[i - 1][j] + grid[i][j];                } else {                    dp[i][j] = Math.min(dp[i - 1][j], dp[i][j - 1]) + grid[i][j];                }            }        }        return dp[m - 1][n - 1];    }        public static int maxSubArray(int[] nums) {        if (nums.length == 0) return 0;        int maxans = nums[0];        int max = nums[0];        for (int i = 1; i < nums.length; i++) {            max = Math.max(nums[i], max + nums[i]);            maxans = Math.max(maxans, max);        }        return maxans;    }}

总结

  • 网格问题:通过动态规划填充dp数组,处理每个点的上下左右情况,最后返回右下角的值。
  • 最大子串和:同样使用动态规划,记录当前子串和和最大值,确保每一步都取最优解。

这两个算法分别解决了两个不同的问题,展示了动态规划在不同场景中的应用。

转载地址:http://nlyk.baihongyu.com/

你可能感兴趣的文章
Nacos发布0.5.0版本,轻松玩转动态 DNS 服务
查看>>
Nacos启动异常
查看>>
Nacos命名空间配置_每个人用各自自己的命名空间---SpringCloud Alibaba_若依微服务框架改造---工作笔记001
查看>>
Nacos和Zookeeper对比
查看>>
Nacos在双击startup.cmd启动时提示:Unable to start embedded Tomcat
查看>>
Nacos基础版 从入门到精通
查看>>
Nacos如何实现Raft算法与Raft协议原理详解
查看>>
Nacos安装教程(非常详细)从零基础入门到精通,看完这一篇就够了
查看>>
Nacos实战攻略:从入门到精通,全面掌握服务治理与配置管理!(上)
查看>>
Nacos实战攻略:从入门到精通,全面掌握服务治理与配置管理!(下)
查看>>
Nacos心跳机制实现快速上下线
查看>>
nacos报错com.alibaba.nacos.shaded.io.grpc.StatusRuntimeException: UNAVAILABLE: io exception
查看>>
nacos服务提供和发现及客户端负载均衡配置
查看>>
Nacos服务注册与发现demo
查看>>
Nacos服务注册与发现的2种实现方法!
查看>>
nacos服务注册和发现原理简单实现案例
查看>>
Nacos服务注册总流程(源码分析)
查看>>
nacos服务注册流程
查看>>
Nacos服务部署安装
查看>>
nacos本地可以,上服务器报错
查看>>