![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
动态规划
文章平均质量分 93
WukongGo
这个作者很懒,什么都没留下…
展开
-
剑指Offer14- I:剪绳子java实现
剑指 Offer 14- I. 剪绳子https://leetcode-cn.com/problems/jian-sheng-zi-lcof/给你一根长度为 n 的绳子,请把绳子剪成整数长度的 m 段(m、n都是整数,n>1并且m>1),每段绳子的长度记为 k[0],k[1]...k[m-1] 。请问 k[0]*k[1]*...*k[m-1] 可能的最大乘积是多少?例如,当绳子的长度是8时,我们把它剪成长度分别为2、3、3的三段,此时得到的最大乘积是18。示例 1:输入: 2输原创 2020-08-27 21:16:33 · 230 阅读 · 0 评论 -
矩阵中的最长递增路径java实现
矩阵中的最长递增路径https://leetcode-cn.com/problems/longest-increasing-path-in-a-matrix/给定一个整数矩阵,找出最长递增路径的长度。对于每个单元格,你可以往上,下,左,右四个方向移动。 你不能在对角线方向上移动或移动到边界外(即不允许环绕)。示例 1:输入: nums =[ [9,9,4], [6,6,8], [2,1,1]]输出: 4解释: 最长递增路径为[1, 2, 6, 9]。示例 2...原创 2020-07-26 16:45:53 · 511 阅读 · 0 评论 -
分割数组的最大值java实现
分割数组的最大值https://leetcode-cn.com/problems/split-array-largest-sum/给定一个非负整数数组和一个整数m,你需要将这个数组分成m个非空的连续子数组。设计一个算法使得这m个子数组各自和的最大值最小。注意:数组长度n满足以下条件:1 ≤ n ≤ 10001 ≤ m ≤ min(50, n)示例:输入:nums = [7,2,5,10,8]m = 2输出:18解释:一共有四种方法将nums分割为2个子...原创 2020-07-25 20:24:09 · 384 阅读 · 0 评论 -
不同的二叉搜索树java实现
一、不同的二叉搜索树https://leetcode-cn.com/problems/unique-binary-search-trees/给定一个整数 n,求以1 ...n为节点组成的二叉搜索树有多少种?示例:输入: 3输出: 5解释:给定 n = 3, 一共有 5 种不同结构的二叉搜索树: 1 3 3 2 1 \ / / / \ \ 3 2 1 ...原创 2020-07-21 09:59:24 · 261 阅读 · 0 评论 -
三角形最小路径和java实现
三角形最小路径和https://leetcode-cn.com/problems/triangle/给定一个三角形,找出自顶向下的最小路径和。每一步只能移动到下一行中相邻的结点上。相邻的结点 在这里指的是 下标 与 上一层结点下标 相同或者等于 上一层结点下标 + 1 的两个结点。例如,给定三角形:[ [2], [3,4], [6,5,7], [4,1,8,3]]自顶向下的最小路径和为11(即,2+3+5+1= 11)。思路一:D...原创 2020-07-14 10:00:12 · 270 阅读 · 0 评论 -
dp规划路径问题java实现
1.地下城游戏https://leetcode-cn.com/problems/dungeon-game/一些恶魔抓住了公主(P)并将她关在了地下城的右下角。地下城是由M x N 个房间组成的二维网格。我们英勇的骑士(K)最初被安置在左上角的房间里,他必须穿过地下城并通过对抗恶魔来拯救公主。骑士的初始健康点数为一个正整数。如果他的健康点数在某一时刻降至 0 或以下,他会立即死亡。有些房间由恶魔守卫,因此骑士在进入这些房间时会失去健康点数(若房间里的值为负整数,则表示骑士将损失健康点数);其.原创 2020-07-13 15:51:55 · 469 阅读 · 0 评论 -
leetcode买卖股票的最佳时机问题汇总java实现
1.买卖股票的最佳时机https://leetcode-cn.com/problems/best-time-to-buy-and-sell-stock给定一个数组,它的第i 个元素是一支给定股票第 i 天的价格。如果你最多只允许完成一笔交易(即买入和卖出一支股票一次),设计一个算法来计算你所能获取的最大利润。注意:你不能在买入股票前卖出股票。示例 1:输入: [7,1,5,3,6,4]输出: 5解释: 在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 =..原创 2020-07-12 20:23:26 · 786 阅读 · 0 评论 -
恢复空格
题目描述:https://leetcode-cn.com/problems/re-space-lcci哦,不!你不小心把一个长篇文章中的空格、标点都删掉了,并且大写也弄成了小写。像句子"I reset the computer. It still didn’t boot!"已经变成了"iresetthecomputeritstilldidntboot"。在处理标点符号和大小写之前,你得先把它断成词语。当然了,你有一本厚厚的词典dictionary,不过,有些词没在词典里。假设文章用sentence表原创 2020-07-09 16:23:26 · 210 阅读 · 0 评论 -
正则表达式匹配(regular-expression-matching)java实现
题目描述给你一个字符串s和一个字符规律p,请你来实现一个支持 '.'和'*'的正则表达式匹配。'.' 匹配任意单个字符'*' 匹配零个或多个前面的那一个元素所谓匹配,是要涵盖整个字符串s的,而不是部分字符串。说明:s可能为空,且只包含从a-z的小写字母。p可能为空,且只包含从a-z的小写字母,以及字符.和*。示例 1:输入:s = ...原创 2020-04-11 16:58:04 · 335 阅读 · 0 评论 -
jump-game(I II)跳跃到达数组的最后一个元素的位置java实现
题目描述给出一个非负整数数组,你最初在数组第一个元素的位置数组中的元素代表你在这个位置可以跳跃的最大长度判断你是否能到达数组最后一个元素的位置例如A =[2,3,1,1,4], 返回 true.A =[3,2,1,0,4], 返回 false.思路:动态规划,dp[i]表示能不能到达第i个位置,初值均为false,能到达的就改为true, 依次遍历到最后publi...原创 2020-03-31 15:59:57 · 569 阅读 · 0 评论 -
笔试题-字符串模式匹配模式串中‘?’可以匹配目标串中的任何字符,模式串中的 ’*’可以匹配目标串中的任何长度的串java实现
题目描述给出两个字符串,分别是模式串P和目标串T,判断模式串和目标串是否匹配,匹配输出 1,不匹配输出 0。模式串中‘?’可以匹配目标串中的任何字符,模式串中的 ’*’可以匹配目标串中的任何长度的串,模式串的其它字符必须和目标串的字符匹配。例如P=a?b,T=acb,则P 和 T 匹配。输入描述:输入第一行包含一个字符串p,(1 ≤ |p| ≤ 20).输入第二行...原创 2020-03-28 17:14:25 · 1091 阅读 · 0 评论 -
动态规划-12word-break(I II)判断s是否可以用空格分割成一个单词序列,使得单词序列中所有的单词都是dict中的单词java实现
word-break I题目描述给定一个字符串s和一组单词dict,判断s是否可以用空格分割成一个单词序列,使得单词序列中所有的单词都是dict中的单词(序列可以包含一个或多个单词)。例如:给定s=“leetcode”;dict=["leet", "code"].返回true,因为"leetcode"可以被分割成"leet code".思路:dp[i]为s的0到i个字符能否被di...原创 2020-03-26 11:50:14 · 266 阅读 · 0 评论 -
动态规划-11palindrome-partitioning-ii计算将字符串s分割成回文分割结果的最小切割数
题目描述给出一个字符串s,分割s使得分割出的每一个子串都是回文串计算将字符串s分割成回文分割结果的最小切割数例如:给定字符串s="aab",返回1,因为回文分割结果["aa","b"]是切割一次生成的。思路:dp[i]表示从i到len-1的最小切割数p[i][j]表示字符串从i到j是否串回文从字符串的最后开始,依次向前遍历,直到字符串的开头dp[s.lengt...原创 2020-03-22 23:01:29 · 313 阅读 · 0 评论 -
动态规划-10decode-ways现在给出加密成数字的密文,请判断有多少种解密的方法java实现
题目描述一条包含字母A-Z 的消息通过以下方式进行了编码:'A' -> 1'B' -> 2...'Z' -> 26给定一个只包含数字的非空字符串,请计算解码方法的总数。示例 1:输入: "12"输出: 2解释:它可以解码为 "AB"(1 2)或者 "L"(12)。示例2:输入: "226"输出: 3解释:它可以解码为 "BZ" (2 ...原创 2020-03-22 18:03:14 · 411 阅读 · 0 评论 -
动态规划-09candy分发糖果java实现
题目描述老师想给孩子们分发糖果,有N个孩子站成了一条直线,老师会根据每个孩子的表现,预先给他们评分。你需要按照以下要求,帮助老师给这些孩子分发糖果:每个孩子至少分配到 1 个糖果。 相邻的孩子中,评分高的孩子必须获得更多的糖果。那么这样下来,老师至少需要准备多少颗糖果呢?示例1:输入: [1,0,2]输出: 5解释: 你可以分别给这三个孩子分发 2、1、2 颗糖...原创 2020-03-20 23:08:05 · 305 阅读 · 0 评论 -
动态规划-08interleaving-string给出三个字符串s1, s2, s3,判断s3是否可以由s1和s2交织而成java实现
题目描述给定三个字符串s1,s2,s3, 验证s3是否是由s1和s2交错组成的。示例 1:输入: s1 = "aabcc", s2 = "dbbca", s3 = "aadbbcbcac"输出: true示例2:输入: s1 = "aabcc", s2 = "dbbca", s3 = "aadbbbaccc"输出: false思路:dp[i][...原创 2020-03-20 18:13:17 · 1408 阅读 · 0 评论 -
动态规划-07distinct-subsequences给定一个字符串 S 和一个字符串 T,计算在 S 的子序列中 T 出现的个数java实现
题目描述给定一个字符串S和一个字符串T,计算在S的子序列中T出现的个数。一个字符串的一个子序列是指,通过删除一些(也可以不删除)字符且不干扰剩余字符相对位置所组成的新字符串。(例如,"ACE"是"ABCDE"的一个子序列,而"AEC"不是)示例1:输入: S = "rabbbit", T = "rabbit"输出:3解释:如下图所示, 有 3 ...原创 2020-03-20 15:48:33 · 2292 阅读 · 0 评论 -
回溯法动态规划-06subsets(I II)现在有一个没有重复元素(有重复元素)的整数集合S,求S的所有子集java实现
题目描述(牛客需要排序输出)现在有一个没有重复元素的整数集合S,求S的所有子集注意:你给出的子集中的元素必须按非递增的顺序排列 给出的解集中不能出现重复的元素例如:如果S=[1,2,3], 给出的解集应为:[↵ [3],↵ [1],↵ [2],↵ [1,2,3],↵ [1,3],↵ [2,3],↵ [1,2],↵ []↵]思路:用到回溯方法,具体思想可...原创 2020-03-19 23:13:34 · 1203 阅读 · 1 评论 -
动态规划-05triangle给出一个三角形,从三角形顶部到底部的最小路径和java实现
题目描述给定一个三角形,找出自顶向下的最小路径和。每一步只能移动到下一行中相邻的结点上。例如,给定三角形:[ [2], [3,4], [6,5,7], [4,1,8,3]]自顶向下的最小路径和为11(即,2+3+5+1= 11)。思路:从最底层求起,用dp数组,存放每层的数和其相邻的两个下一层数的和的最小值,直到遍历到顶层,返回...原创 2020-03-19 14:59:52 · 668 阅读 · 0 评论 -
给定一个非负整数n,表示代码的位数,打印格雷码的序列java实现
题目描述格雷码是一种二进制编码系统,如果任意两个相邻的代码只有一位二进制数不同,则称这种编码为格雷码(Gray Code)。给定一个非负整数n,表示代码的位数,打印格雷码的序列。格雷码序列必须以0开头。例如:给定n=2,返回[0,1,3,2]. 格雷码的序列为:00 - 0↵01 - 1↵11 - 3↵10 - 2思路:格雷码随着位数增加,实际上是在前一位格雷码基础上...原创 2020-03-18 18:49:48 · 405 阅读 · 0 评论 -
动态规划-04请计算将word1转换为word2至少需要多少步操作java实现
题目描述给定两个单词word1和word2,请计算将word1转换为word2至少需要多少步操作。你可以对一个单词执行以下3种操作:a)在单词中插入一个字符b)删除单词中的一个字符c)替换单词中的一个字符示例1:输入: word1 = "horse", word2 = "ros"输出: 3解释:horse -> rorse (将 'h' 替换为 'r')ror...原创 2020-03-16 23:04:43 · 1205 阅读 · 0 评论 -
动态规划-03要从二维数组的左上角走到右下角,请找出路径上的所有数字之和最小的路径java实现
题目描述给定一个由非负整数填充的m x n的二维数组,现在要从二维数组的左上角走到右下角,请找出路径上的所有数字之和最小的路径。注意:你每次只能向下或向右移动。到点(m,n)的最小和路径=min{到点(m-1,n)的最小和路径,到点(m,n-1)的最小和路径}+点(m,n)的值f(m,n)=min{f(m-1,n),f(m,n-1)}+grid(m,n)public class...原创 2020-03-16 17:39:17 · 1741 阅读 · 0 评论 -
动态规划-02每次只能向上爬1步或者2步,有多少种方法可以爬到n层楼梯顶部java实现
题目描述你在爬楼梯,需要n步才能爬到楼梯顶部每次你只能向上爬1步或者2步。有多少种方法可以爬到楼梯顶部?到达n层的方法=到达n-1层方法+到达n-2层方法f(n)=f(n-1)+f(n-2)public class Solution { public int climbStairs(int n) { if(n<2) ret...原创 2020-03-16 16:58:14 · 759 阅读 · 0 评论 -
如何理解动态规划(Dynamic Programming)?
转载原文作者:【洛谷网校 阮行止】https://www.zhihu.com/question/23995189/answer/6130969051. 从一个生活问题谈起 先来看看生活中经常遇到的事吧——假设您是个土豪,身上带了足够的1、5、10、20、50、100元面值的钞票。现在您的目标是凑出某个金额w,需要用到尽量少的钞票。 依据生活经验,我们显然可以采取这样的策略:能...转载 2020-03-16 11:25:07 · 196 阅读 · 0 评论 -
动态规划-01求地图的左上角走到右下角的路径数(有障碍和无障碍情况)java实现
题目描述一个机器人在m×n大小的地图的左上角(起点,下图中的标记“start"的位置)。机器人每次向下或向右移动。机器人要到达地图的右下角。(终点,下图中的标记“Finish"的位置)。可以有多少种不同的路径从起点走到终点?上图是3×7大小的地图,有多少不同的路径?备注:m和n小于等于100动态规划解决思路:将一个大问题转化成几个小问题;求解小问题;推出大问题的解。...原创 2020-03-16 11:01:54 · 1675 阅读 · 0 评论