随笔分类 -  动态规划系列

摘要:读完本文,你可以去力扣拿下如下题目: 877.石子游戏 上一篇文章 几道智力题 中讨论到一个有趣的「石头游戏」,通过题目的限制条件,这个游戏是先手必胜的。但是智力题终究是智力题,真正的算法问题肯定不会是投机取巧能搞定的。所以,本文就借石头游戏来讲讲「假设两个人都足够聪明,最后谁会获胜」这一类问题该如 阅读全文
posted @ 2020-12-16 20:20 labuladong 阅读(373) 评论(0) 推荐(0) 编辑
摘要:读完本文,你可以去力扣拿下如下题目: 1143.最长公共子序列 最长公共子序列(Longest Common Subsequence,简称 LCS)是一道非常经典的面试题目,因为它的解法是典型的二维动态规划,大部分比较困难的字符串问题都和这个问题一个套路,比如说编辑距离。而且,这个算法稍加改造就可以 阅读全文
posted @ 2020-11-08 19:44 labuladong 阅读(8605) 评论(0) 推荐(2) 编辑
摘要:读完本文,你可以去力扣拿下如下题目: 516.最长回文子序列 子序列问题是常见的算法问题,而且并不好解决。 首先,子序列问题本身就相对子串、子数组更困难一些,因为前者是不连续的序列,而后两者是连续的,就算穷举你都不一定会,更别说求解相关的算法问题了。 而且,子序列问题很可能涉及到两个字符串,比如前文 阅读全文
posted @ 2020-11-08 19:38 labuladong 阅读(1581) 评论(0) 推荐(0) 编辑
摘要:这篇文章就给你讲明白两个问题: 1、到底什么才叫「最优子结构」,和动态规划什么关系。 2、为什么动态规划遍历 dp 数组的方式五花八门,有的正着遍历,有的倒着遍历,有的斜着遍历。 一、最优子结构详解 「最优子结构」是某些问题的一种特定性质,并不是动态规划问题专有的。也就是说,很多问题其实都具有最优子 阅读全文
posted @ 2020-11-08 19:27 labuladong 阅读(208) 评论(0) 推荐(0) 编辑
摘要:读完本文,你可以去力扣拿下如下题目: 1312.让字符串成为回文串的最少插入次数 回文串就是正着读反着读都一样的字符,在笔试面试中经常出现这类问题。 labuladong 公众号有好几篇讲解回文问题的文章,是判断回文串或者寻找最长回文串/子序列的: 判断回文链表 计算最长回文子串 计算最长回文子序列 阅读全文
posted @ 2020-11-08 19:23 labuladong 阅读(491) 评论(0) 推荐(0) 编辑
摘要:读完本文,你可以去力扣拿下如下题目: 53.最大子序和 最大子数组问题和前文讲过的 经典动态规划:最长递增子序列 的套路非常相似,代表着一类比较特殊的动态规划问题的思路: 思路分析 其实第一次看到这道题,我首先想到的是滑动窗口算法,因为我们前文说过嘛,滑动窗口算法就是专门处理子串/子数组问题的,这里 阅读全文
posted @ 2020-11-08 19:22 labuladong 阅读(804) 评论(0) 推荐(0) 编辑
摘要:我们号之前写过十几篇动态规划文章,可以说动态规划技巧对于算法效率的提升非常可观,一般来说都能把指数级和阶乘级时间复杂度的算法优化成 O(N^2),堪称算法界的二向箔,把各路魑魅魍魉统统打成二次元。 但是,动态规划本身也是可以进行阶段性优化的,比如说我们常听说的「状态压缩」技巧,就能够把很多动态规划解 阅读全文
posted @ 2020-11-07 20:42 labuladong 阅读(845) 评论(1) 推荐(1) 编辑
摘要:本文思路参考自英文版 LeetCode 题解: https://leetcode.com/problems/best-time-to-buy-and-sell-stock-with-transaction-fee/discuss/108870/Most-consistent-ways-of-deal 阅读全文
posted @ 2020-11-07 20:40 labuladong 阅读(745) 评论(0) 推荐(0) 编辑
摘要:读完本文,你可以去力扣拿下如下题目: 312.戳气球 今天我们要聊的这道题「Burst Balloon」和之前我们写过的那篇 经典动态规划:高楼扔鸡蛋问题 分析过的高楼扔鸡蛋问题类似,知名度很高,但难度确实也很大。因此 labuladong 公众号就给这道题赐个座,来看一看这道题目到底有多难。 它是 阅读全文
posted @ 2020-11-07 11:14 labuladong 阅读(907) 评论(0) 推荐(0) 编辑
摘要:读完本文,你可以去力扣拿下如下题目: 435. 无重叠区间 452.用最少数量的箭引爆气球 什么是贪心算法呢?贪心算法可以认为是动态规划算法的一个特例,相比动态规划,使用贪心算法需要满足更多的条件(贪心选择性质),但是效率比动态规划要高。 比如说一个算法问题使用暴力解法需要指数级时间,如果能使用动态 阅读全文
posted @ 2020-11-07 11:05 labuladong 阅读(542) 评论(0) 推荐(0) 编辑
摘要:读完本文,你可以去力扣拿下如下题目: 198.打家劫舍 213.打家劫舍II 337.打家劫舍III 有读者私下问我 LeetCode 「打家劫舍」系列问题(英文版叫 House Robber)怎么做,我发现这一系列题目的点赞非常之高,是比较有代表性和技巧性的动态规划题目,今天就来聊聊这道题目。 打 阅读全文
posted @ 2020-11-07 10:58 labuladong 阅读(1841) 评论(0) 推荐(0) 编辑
摘要:读完本文,你可以去力扣拿下如下题目: 887.鸡蛋掉落 今天要聊一个很经典的算法问题,若干层楼,若干个鸡蛋,让你算出最少的尝试次数,找到鸡蛋恰好摔不碎的那层楼。国内大厂以及谷歌脸书面试都经常考察这道题,只不过他们觉得扔鸡蛋太浪费,改成扔杯子,扔破碗什么的。 具体的问题等会再说,但是这道题的解法技巧很 阅读全文
posted @ 2020-11-06 17:24 labuladong 阅读(1118) 评论(0) 推荐(0) 编辑
摘要:读完本文,你可以去力扣拿下如下题目: 887.鸡蛋掉落 上篇文章聊了高楼扔鸡蛋问题,讲了一种效率不是很高,但是较为容易理解的动态规划解法。后台很多读者问如何更高效地解决这个问题,今天就谈两种思路,来优化一下这个问题,分别是二分查找优化和重新定义状态转移。 如果还不知道高楼扔鸡蛋问题的读者可以看下「经 阅读全文
posted @ 2020-11-06 17:22 labuladong 阅读(673) 评论(0) 推荐(0) 编辑
摘要:读完本文,你可以去力扣拿下如下题目: 651.四键键盘 PS:现在这到题好想变成会员题目了?我当时做的时候还是免费的。 四键键盘问题很有意思,而且可以明显感受到:对 dp 数组的不同定义需要完全不同的逻辑,从而产生完全不同的解法。 首先看一下题目: 如何在 N 次敲击按钮后得到最多的 A?我们穷举呗 阅读全文
posted @ 2020-11-06 17:15 labuladong 阅读(175) 评论(0) 推荐(0) 编辑
摘要:读完本文,你不仅学会了算法套路,还可以顺便去 LeetCode 上拿下如下题目: 10.正则表达式匹配 正则表达式是一个非常强力的工具,本文就来具体看一看正则表达式的底层原理是什么。力扣第 10 题「正则表达式匹配」就要求我们实现一个简单的正则匹配算法,包括「.」通配符和「*」通配符。 这两个通配符 阅读全文
posted @ 2020-11-06 17:12 labuladong 阅读(436) 评论(0) 推荐(0) 编辑
摘要:读完本文,你可以去力扣拿下如下题目: 28.实现 strStr() KMP 算法(Knuth-Morris-Pratt 算法)是一个著名的字符串匹配算法,效率很高,但是确实有点复杂。 很多读者抱怨 KMP 算法无法理解,这很正常,想到大学教材上关于 KMP 算法的讲解,也不知道有多少未来的 Knut 阅读全文
posted @ 2020-11-05 20:29 labuladong 阅读(656) 评论(0) 推荐(0) 编辑
摘要:读完本文,你可以去力扣拿下如下题目: 509.斐波那契数 322.零钱兑换 这篇文章是我们号半年前一篇 200 多赞赏的成名之作「动态规划详解」的进阶版。由于账号迁移的原因,旧文无法被搜索到,所以我润色了本文,并添加了更多干货内容,希望本文成为解决动态规划的一部「指导方针」。 动态规划问题(Dyna 阅读全文
posted @ 2020-11-05 20:27 labuladong 阅读(408) 评论(0) 推荐(0) 编辑
摘要:读完本文,你可以去力扣拿下如下题目: 300.最长上升子序列 也许有读者看了前文 动态规划详解,学会了动态规划的套路:找到了问题的「状态」,明确了 dp 数组/函数的含义,定义了 base case;但是不知道如何确定「选择」,也就是不到状态转移的关系,依然写不出动态规划解法,怎么办? 不要担心,动 阅读全文
posted @ 2020-11-05 20:26 labuladong 阅读(1006) 评论(0) 推荐(0) 编辑
摘要:读完本文,你可以去力扣拿下如下题目: 72.编辑距离 前几天看了一份鹅场的面试题,算法部分大半是动态规划,最后一题就是写一个计算编辑距离的函数,今天就专门写一篇文章来探讨一下这个问题。 我个人很喜欢编辑距离这个问题,因为它看起来十分困难,解法却出奇得简单漂亮,而且它是少有的比较实用的算法(是的,我承 阅读全文
posted @ 2020-11-05 20:24 labuladong 阅读(699) 评论(0) 推荐(0) 编辑
摘要:读完本文,你可以去力扣拿下如下题目: 416.分割等和子集 上篇文章 经典动态规划:0-1 背包问题 详解了通用的 0-1 背包问题,今天来看看背包问题的思想能够如何运用到其他算法题目。 而且,不是经常有读者问,怎么将二维动态规划压缩成一维动态规划吗?这就是状态压缩,很容易的,本文也会提及这种技巧。 阅读全文
posted @ 2020-11-04 20:13 labuladong 阅读(708) 评论(0) 推荐(0) 编辑

我的公众号 labuladong,专注于 LeetCode 刷题,欢迎关注。