![](https://img-blog.csdnimg.cn/20201014180756918.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
动态规划
算法动态章节
木水先生
严于律己,宽以待人。
展开
-
最长回文子串长度
1 题目链接最长回文子串长度2 题目描述描述对于一个字符串,请设计一个高效算法,计算其中最长回文子串的长度。给定字符串A以及它的长度n,请返回最长回文子串的长度。示例输入:"abc1234321ab",12返回值:73 代码实现public class Solution { public int getLongestPalindrome(String A, int n) { boolean[][] dp = new boolean[n][n]; // 记原创 2021-04-02 15:38:54 · 1083 阅读 · 0 评论 -
约翰的后花园
1 题目链接约翰的后花园2 题目描述描述约翰想在他家后面的空地上建一个后花园,现在有两种砖,一种3 dm的高度,7 dm的高度。约翰想围成x dm的墙。如果约翰能做到,输出YES,否则输出NO。X是一个整数,取值范围为 [3, 1000]。示例样例 1:输入 : x = 10输出 : "YES"解释:x = 3 + 7 : 即需要1匹3 dm高度的砖和1匹7 dm 高度的砖。样例 2:输入 : x = 5输出 : "NO"解释:不能用高度为3 dm的砖和高度为7 d原创 2021-03-31 13:11:03 · 147 阅读 · 0 评论 -
栅栏染色 lintcode514
1 题目链接栅栏染色 lintcode5142 题目描述描述我们有一个栅栏,它有n个柱子,现在要给柱子染色,有k种颜色可以染。必须保证不存在超过2个相邻的柱子颜色相同,求有多少种染色方案。示例例 1:输入: n=3, k=2 输出: 6Explanation: post 1, post 2, post 3 way1 0 0 1 way2 0 1 0 way3原创 2021-03-31 11:55:19 · 184 阅读 · 0 评论 -
买卖股票的最好时机
1 题目链接买卖股票的最好时机2 题目要求描述假设你有一个数组,其中第\ i i 个元素是股票在第\ i i 天的价格。你有一次买入和卖出的机会。(只有买入了股票以后才能卖出)。请你设计一个算法来计算可以获得的最大收益。示例输入:[1,4,2]返回值:33 代码思路买卖股票,买的价越低,卖的价越高,赚取的差价越多。遍历数组,使用一个变量记录卖之前的最小值,每次使用当前价格减去最小价格,和当前记录的最大差价做对比,取较大的即为利润。4 代码实现public class Sol原创 2021-03-31 00:26:08 · 49 阅读 · 0 评论 -
最长回文子串
1 题目链接最长回文子串2 题目要求描述对于一个字符串,请设计一个高效算法,计算其中最长回文子串的长度。给定字符串A以及它的长度n,请返回最长回文子串的长度。示例输入:"abc1234321ab",12返回值:73 代码思路暴力法破解相对简单,但是时间复杂度很高,为O(n3)。之所以是O(n3),因为我们要使用两个循环去寻找从i到j的子串,找到这个子串之后,还需要使用一个循环去判断这个子串是否回文。暴力算法中在回文的判断上是可以简化的,因为回文的计算有很多重复部分,比如给一个原创 2021-03-31 00:05:17 · 57 阅读 · 0 评论 -
爬楼梯2 lintcode272
1 题目链接爬楼梯2 lintcode2722 题目要求描述一个小孩爬一个 n 层台阶的楼梯。他可以每次跳 1 步, 2 步 或者 3 步。实现一个方法来统计总共有多少种不同的方式爬到最顶层的台阶。说明对于n=0,我们认为答案是1。示例样例1:输入: 3输出: 4解释: 1 + 1 + 1 = 2 + 1 = 1 + 2 = 3 = 3 , 一共4种方法。样例2:输入: 4输出: 7解释: 1 + 1 + 1 + 1 = 1 + 1 + 2 = 1 + 2 + 1原创 2021-03-30 17:40:57 · 73 阅读 · 0 评论 -
不同的路径 lintcode114
1 题目链接不同的路径 领扣2 题目要求有一个机器人的位于一个 m × n 个网格左上角。机器人每一时刻只能向下或者向右移动一步。机器人试图达到网格的右下角。问有多少条不同的路径?3 代码思路4 代码实现public class Solution { public int uniquePaths(int m, int n) { int [][]dp = new int[m][n]; for(int i = 0; i < m; i++){ for(int原创 2021-03-30 16:38:12 · 130 阅读 · 0 评论 -
不同的路径2 lintcode115
1 题目链接不同的路径2 领扣1152 题目要求描述“领扣114不同的路径” 的跟进问题:现在考虑网格中有障碍物,那样将会有多少条不同的路径?网格中的障碍和空位置分别用 1 和 0 来表示。3 代码思路大致实现思路基本相同,路径添加了障碍物,有障碍物的地方无法到达,我们将其对应的 dp[i][j] 设置为0即可。较大的不同是在第一行和第一列,如果遇到障碍物,那么障碍物和障碍物以后的结点都不可达,对应的 dp[i][j] 设置为0。4 代码实现public class Solutio原创 2021-03-30 17:20:30 · 118 阅读 · 0 评论 -
爬楼梯 lintcode111
1 题目链接爬楼梯2 题目要求描述假设你正在爬楼梯,需要n步你才能到达顶部。但每次你只能爬一步或者两步,你能有多少种不同的方法爬到楼顶部?示例样例 1:输入: n= 3输出: 3样例解释:1) 1, 1, 12) 1, 23) 2, 1共3种样例 2:输入: n = 1输出: 1解释:只有一种方案3 代码思路简单的斐波那契数变形。常用三种方法:递归法:时间复杂度较大,非常多重复性计算。动态规划法:需要一个数组来记录,空间复杂度较大。变量记录法:使原创 2021-03-30 15:07:40 · 80 阅读 · 0 评论 -
子数组的最大累加和问题
1 题目链接子数组的最大累加和问题2 题目要求描述给定一个数组arr,返回子数组的最大累加和例如,arr = [1, -2, 3, 5, -2, 6, -1],所有子数组中,[3, 5, -2, 6]可以累加出最大的和12,所以返回12.题目保证没有全为负数的数据要求时间复杂度为O(n),空间复杂度为O(1)示例输入:[1, -2, 3, 5, -2, 6, -1]返回值:123 代码思路题目如果不加时间复杂度为O(n),那么很容易想到用两层循环遍历数组,计算索引从i原创 2021-03-30 14:10:02 · 190 阅读 · 0 评论