<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[lh_mti的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/lh_mti</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; lh_mti]]></copyright><item><title><![CDATA[不同路径]]></title><link>https://blog.youkuaiyun.com/lh_mti/article/details/106887245</link><guid>https://blog.youkuaiyun.com/lh_mti/article/details/106887245</guid><author>lh_mti</author><pubDate>Sun, 21 Jun 2020 16:32:44 +0800</pubDate><description><![CDATA[一个机器人位于一个 m x n 网格的左上角 （起始点在下图中标记为“Start” ）。
机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角（在下图中标记为“Finish”）。
问总共有多少条不同的路径？
题解：
我们用dp[i][j]表示机器人走到[i][j]位置的路径个数。
那么有如下递推公式：
dp[i][j] = dp[i][j-1]+dp[i-1][j]
考虑边界场景：
dp[0][0,1,2,3,4,…n] = 1;
dp[0,1,2,3,4…n][0] = 1;
public in]]></description><category></category></item><item><title><![CDATA[最长回文字串]]></title><link>https://blog.youkuaiyun.com/lh_mti/article/details/106886577</link><guid>https://blog.youkuaiyun.com/lh_mti/article/details/106886577</guid><author>lh_mti</author><pubDate>Sun, 21 Jun 2020 15:59:08 +0800</pubDate><description><![CDATA[给定一个字符串 s，找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。
题解：
Boolean dp[i][j] 表示从i到j的字串是否为回文。有如下递推公式：
dp[i][j] = dp[i+1][j-1] &amp;&amp; n[i] == n[j]
其中n[i]表示字符串的第i个字符。
对于边界条件，有如下成立：
dp[i][i] = true;
dp[i][i+1] = n[i]==n[i+1];
因此我们可以从i开始循环，每次判断i+1，i+2，i+3…是否为回文串，依次类推找]]></description><category></category></item><item><title><![CDATA[买入股票的最低价钱]]></title><link>https://blog.youkuaiyun.com/lh_mti/article/details/106885210</link><guid>https://blog.youkuaiyun.com/lh_mti/article/details/106885210</guid><author>lh_mti</author><pubDate>Sun, 21 Jun 2020 14:21:13 +0800</pubDate><description><![CDATA[给定一个数组，它的第 i 个元素是一支给定股票第 i 天的价格。
如果你最多只允许完成一笔交易（即买入和卖出一支股票一次），设计一个算法来计算你所能获取的最大利润。
注意：你不能在买入股票前卖出股票。
动态规划的方法：
p[i]表示股票第i天的价格，考虑dp[i]表示第i天的最大收益。因此有递推公式如下：
dp[i] = p[i] - buy &gt; dp[i-1]?p[i]-buy:dp[i-1]
dp[0] = p[0]
这里的buy用于记录买入股票的最低价钱。
public int maxProfi]]></description><category></category></item><item><title><![CDATA[爬楼梯]]></title><link>https://blog.youkuaiyun.com/lh_mti/article/details/106883454</link><guid>https://blog.youkuaiyun.com/lh_mti/article/details/106883454</guid><author>lh_mti</author><pubDate>Sun, 21 Jun 2020 11:31:19 +0800</pubDate><description><![CDATA[假设你正在爬楼梯，一共有n阶；每次可以爬1阶或者2阶。请问一共有多少种不同的爬法？
题解：
我们使用dp[i]表示爬到第i阶，并且最后一次为1阶的爬法；用np[i]表示爬到第i阶，并且最后一次为2阶的爬法。
因此爬到第i阶的方法=dp[i] + np[i]
dp的递推公式：
dp[i] = dp[i-1]+np[I-1];
np的递推公式：
np[I] = dp[i-1];
class Solution {
    public int climbStairs(int n) {
        int[] ]]></description><category></category></item><item><title><![CDATA[最大子序列的和]]></title><link>https://blog.youkuaiyun.com/lh_mti/article/details/106882951</link><guid>https://blog.youkuaiyun.com/lh_mti/article/details/106882951</guid><author>lh_mti</author><pubDate>Sun, 21 Jun 2020 11:01:03 +0800</pubDate><description><![CDATA[给定一个整数数组 nums ，找到一个具有最大和的连续子数组（子数组最少包含一个元素），返回其最大和。
输入: [-2,1,-3,4,-1,2,1,-5,4],
输出: 6
解释: 连续子数组 [4,-1,2,1] 的和最大，为 6。
题解：
使用dp[i]表示以i为结尾的连续子数组的最大值。
有如下递推公式：dp[i] = (dp[i-1]+nums[i])&gt;nums[i]?dp[i-1]+nums[i]:nums[i];
最终的结果 ret = Max（dp[i]）
public int maxS]]></description><category></category></item></channel></rss>