动态规划
动态规划
聂炳玉
不断学习,不断提升
展开
-
10正则表达式匹配
一、前言标签:动态规划。问题来源LeetCode 10 难度:困难。问题链接:https://leetcode-cn.com/problems/regular-expression-matching/二、题目给你一个字符串s和一个字符规律p,请你来实现一个支持 '.'和'*'的正则表达式匹配。'.' 匹配任意单个字符'*' 匹配零个或多个前面的那一个元素所谓匹配,是要涵盖整个字符串s的,而不是部分字符串。说明:s 可能为空,且只包含...原创 2020-07-24 09:30:48 · 592 阅读 · 0 评论 -
646最长数对链
一、前言分类:动态规划。问题来源LeetCode 646 难度:中等。问题链接:https://leetcode-cn.com/problems/maximum-length-of-pair-chain二、题目给出n个数对。在每一个数对中,第一个数字总是比第二个数字小。现在,我们定义一种跟随关系,当且仅当b < c时,数对(c, d)才可以跟在(a, b)后面。我们用这种形式来构造一个数对链。给定一个对数集合,找出能够形成的最长数对链的长度。你不需要用到所有的...原创 2020-07-11 00:31:44 · 163 阅读 · 0 评论 -
300最长上升子序列
一、前言分类:动态规划。问题来源LeetCode 300 难度:中等。问题链接:https://leetcode-cn.com/problems/longest-increasing-subsequence/二、题目给定一个无序的整数数组,找到其中最长上升子序列的长度。示例1:输入: [10,9,2,5,3,7,101,18]输出: 4 解释: 最长的上升子序列是 [2,3,7,101],它的长度是 4。三、思路3.1 方法一:动态规划动态规划递推公..原创 2020-07-10 21:42:58 · 294 阅读 · 0 评论 -
72编辑距离
一、前言分类:动态规划。问题来源LeetCode 887 难度:困难。问题链接:https://leetcode-cn.com/problems/edit-distance/二、题目给你两个单词word1 和word2,请你计算出将word1转换成word2 所使用的最少操作数。你可以对一个单词进行如下三种操作:插入一个字符 删除一个字符 替换一个字符示例1:输入:word1 = "horse", word2 = "ros"输出:3解释:horse...原创 2020-07-10 21:03:19 · 153 阅读 · 0 评论 -
887鸡蛋掉落
一、前言分类:动态规划。问题来源LeetCode 887 难度:困难。问题链接:https://leetcode-cn.com/problems/super-egg-drop/二、题目你将获得K个鸡蛋,并可以使用一栋从1到N共有 N层楼的建筑。每个蛋的功能都是一样的,如果一个蛋碎了,你就不能再把它掉下去。你知道存在楼层F ,满足0 <= F <= N 任何从高于 F的楼层落下的鸡蛋都会碎,从F楼层或比它低的楼层落下的鸡蛋都不会破。每次移动,你可...原创 2020-07-09 22:53:18 · 250 阅读 · 0 评论 -
96不同的二叉搜索树
一、前言分类:动态规划。问题来源LeetCode 96 难度:中等。问题链接:https://leetcode-cn.com/problems/unique-binary-search-trees/二、题目给定一个整数n,生成所有由 1 ...n为节点所组成的二叉搜索树。示例:输入:3输出:5解释:以上的输出对应以下 5 种不同结构的二叉搜索树: 1 3 3 2 1 \ / /...原创 2020-07-08 21:23:55 · 101 阅读 · 0 评论 -
95不同的二叉搜索树II
一、前言分类:动态规划。问题来源LeetCode 95 难度:中等。问题链接:https://leetcode-cn.com/problems/unique-binary-search-trees-ii/二、题目给定一个整数n,生成所有由 1 ...n为节点所组成的二叉搜索树。示例:输入:3输出:[ [1,null,3,2], [3,2,null,1], [3,1,null,null,2], [2,1,3], [1,null,2,null...原创 2020-07-08 18:14:51 · 187 阅读 · 0 评论 -
312戳气球
一、前言分类:动态规划。问题来源LeetCode 312 难度:困难。问题链接:https://leetcode-cn.com/problems/burst-balloons/二、题目有 n 个气球,编号为0 到 n-1,每个气球上都标有一个数字,这些数字存在数组nums中。现在要求你戳破所有的气球。如果你戳破气球 i ,就可以获得nums[left] * nums[i] * nums[right]个硬币。这里的left和right代表和i相邻的两个气球的序号...原创 2020-07-07 23:49:39 · 173 阅读 · 0 评论 -
64最小路径和
一、前言分类:动态规划。问题来源LeetCode 64 难度:中等。问题链接:https://leetcode-cn.com/problems/minimum-path-sum/二、题目给定一个包含非负整数的mxn网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。说明:每次只能向下或者向右移动一步。示例:输入:[ [1,3,1], [1,5,1], [4,2,1]]输出: 7解释: 因为路径 1→3→1→1→1 的总和最小...原创 2020-07-07 21:22:30 · 123 阅读 · 0 评论 -
53.最大子序和
一、前言分类:动态规划。问题来源LeetCode 53 难度:简单。问题链接:https://leetcode-cn.com/problems/maximum-subarray/二、题目给定一个整数数组nums,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。示例:输入: [-2,1,-3,4,-1,2,1,-5,4],输出: 6解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。三、思路用动态规划思路解决这个问题。...原创 2020-07-07 21:01:39 · 86 阅读 · 0 评论 -
监控二叉树详细讲解
一、前言问题来源LeetCode 968,难度:困难问题链接:https://leetcode-cn.com/problems/binary-tree-cameras/二、题目给定一个二叉树,我们在树的节点上安装摄像头。节点上的每个摄影头都可以监视其父对象、自身及其直接子对象。计算监控树的所有节点所需的最小摄像头数量。示例 1:输入:[0,0,null,0,0]输出:1解释:如图所示,一台摄像头足以监控所有节点。示例 2:输入:[0,0,n..原创 2020-05-21 00:37:02 · 1947 阅读 · 0 评论 -
矩形覆盖
一、前言《跳台阶》另一个变形形式。二、题目我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?三、思路竖着放相当于向前+1,横着放一次需要放2个相当于向前+2,那矩形覆盖问题等价于《跳台阶·六、扩展2》和青蛙跳台阶解法一样四、编码实现略,参考《跳台阶》六、扩展2。https://...原创 2020-04-25 11:42:22 · 155 阅读 · 0 评论 -
跳台阶
一、前言《斐波那契数列》第二种解法的延伸问题二、题目一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法。三、思路当青蛙最后一次起跳刚好能跳到第n级台阶,它所在台阶是n-1级 或 n-2 级,也就是说我们只要知道跳到 n-1 级台阶的跳法 f(n-1) 和跳到 n-2 级台阶的跳法 f(n-2),就能计算出跳到第n级台阶跳法 f(...原创 2020-04-25 11:00:37 · 264 阅读 · 0 评论 -
目标和
一、前言动态规划相关问题。问题来源LeetCode 494问题链接:https://leetcode-cn.com/problems/target-sum二、题目给定一个非负整数数组,a1, a2, ..., an,和一个目标数,S。现在你有两个符号+和-。对于数组中的任意一个整数,你都可以从+或-中选择一个符号添加在前面。返回可以使最终数组和为目标数 S 的所有添加符号的方法数。示例:输入:nums: [1, 1, 1, 1, 1], S: 3输出:5解...原创 2020-07-07 00:21:52 · 123 阅读 · 0 评论 -
01背包问题通俗易懂解法
一、前言动态规划经典问题,01背包问题记录。二、问题描述假设有 n 件物品,至多可装入容积为 m 的容器当中,试问最大可装入的价值为多少?设w[ i ]为第 i 件物品重量,v[ i ]为第i件物品价值dp[ i ][ j ]表示将前i件物品装入重量 j 的容器当中。三、动态规划解题思路3.1 先回顾一下动态规划算法设计步骤刻画一个最优解的结构特征。 递归地定义最优解的值。 计算最优解的值,通常采用自底向上的方法。 利用计算出的信息构造一个最优解。步骤1~3是动态..原创 2020-07-06 22:29:17 · 1136 阅读 · 0 评论 -
铺瓷砖
一、前言问题来源LeetCode 1240,难度:困难问题链接:https://leetcode-cn.com/problems/tiling-a-rectangle-with-the-fewest-squares二、题目你是一位施工队的工长,根据设计师的要求准备为一套设计风格独特的房子进行室内装修。房子的客厅大小为nx m,为保持极简的风格,需要使用尽可能少的 正方形 瓷砖来铺盖地面。假设正方形瓷砖的规格不限,边长都是整数。请你帮设计师计算一下,最少需要用到多少块方形瓷砖?...原创 2020-06-08 20:37:10 · 828 阅读 · 0 评论 -
最大矩形
一、前言问题来源LeetCode 85,难度:困难问题链接:https://leetcode-cn.com/problems/maximal-rectangle/二、题目给定一个仅包含0 和 1 的二维二进制矩阵,找出只包含 1 的最大矩形,并返回其面积。示例:输入:[ ["1","0","1","0","0"], ["1","0","1","1","1"], ["1","1","1","1","1"], ["1","0","0","1","0"]]输..原创 2020-05-24 11:30:20 · 756 阅读 · 0 评论 -
钢条切割
一、前言问题来源《算法导论》第15章。二、题目给定一段长度为n英寸的钢条和一个价格表p(i=1, 2, .., n),求切割钢条方案,使得销售收益r,最大。注意,如果长度为n英寸的钢条的价格p,足够大,最优解可能就是完全不需要切割。图15-1给出了一个价格表的样例。三、思路3.1:朴素递归算法方法一:朴素递归算法自顶向下切割,第一切割长度第一段为0,1,...,n/2,第二段为n,n-1,...n/2。第一段价值为p(i),继续将第二段进行重复切割。找出所有收益最大值即.原创 2020-05-22 00:15:31 · 650 阅读 · 0 评论 -
动态规划介绍
一、动态规划动态规划方法通常用来求解最优化问题(optimization problem)。这类问题可以有很多可行解,每个解都有一个值,我们希望寻找具有最优值(最小值或最大值)的解。我们称这样的解为问题的一个最优解(an optimal solution),而不是最优解(the optimal solution),因为可能有多个解都达到最优值。我们通常按如下4个步骤来设计一个动态规划算法:刻画一个最优解的结构特征。 递归地定义最优解的值。 计算最优解的值,通常采用自底向上的方法。 利用计算原创 2020-05-21 22:44:19 · 288 阅读 · 0 评论