随笔分类 -  最优化问题

摘要:2020-02-11 21:14:18 问题描述: 问题求解: 本质就是LCS。 public int maxUncrossedLines(int[] A, int[] B) { int len1 = A.length; int len2 = B.length; int[][] dp = new i 阅读全文
posted @ 2020-02-11 21:23 hyserendipity 阅读(620) 评论(0) 推荐(0)
摘要:2020-02-07 17:46:32 问题描述: 问题求解: 解法一:BF 看问题规模看似可以直接暴力解决。 如果直接去解肯定是会超时的,因为每次将原空间划分成A区域,B区域和剩余区域的时间复杂度为O(3 ^ n)。 但是我们可以将问题进行一下转化,之前有个问题是能否将一个数组中的数划分成两个和相 阅读全文
posted @ 2020-02-07 18:09 hyserendipity 阅读(246) 评论(0) 推荐(0)
摘要:2020-02-06 17:01:36 问题描述: 问题求解: 非常经典的计数dp问题,思路就是统计以每个字符为结尾的个数,最后求和即可。 dp[i] = sum of (dp[j]) 0 <= j <= i;可以理解为将最后的一个字符追加到前面的字符串后面。 问题是如何去重。 当我们遇到相同的字符 阅读全文
posted @ 2020-02-06 17:15 hyserendipity 阅读(165) 评论(0) 推荐(0)
摘要:2020-02-03 17:46:04 问题描述: 问题求解: 非常好的题目,和two thumb其实非常类似,但是还是有个一点区别,就是本题要求最后要到达(n - 1, n - 1),只有到达了(n - 1, n - 1)才算是有效解,two thumb是一定会有解的,所以不用加特别判断。 也是一 阅读全文
posted @ 2020-02-03 17:52 hyserendipity 阅读(170) 评论(0) 推荐(0)
摘要:2020-02-01 21:37:39 问题描述: 问题求解: 对于课程来说截止时间在前面的肯定需要优先安排,所以首先需要将courses按照deadline进行排序。 然后只需要不断的加入当前的课程即可,如果时间超过了deadline,那么就将之前最耗时的课程剔除即可。 为什么剔除了耗时的就一定可 阅读全文
posted @ 2020-02-01 21:39 hyserendipity 阅读(119) 评论(0) 推荐(0)
摘要:2020-01-20 22:32:28 问题描述: 问题求解: 双指针 + 贪心。 public int bagOfTokensScore(int[] tokens, int P) { Arrays.sort(tokens); int res = 0; int curr = 0; int l = 0 阅读全文
posted @ 2020-01-20 22:45 hyserendipity 阅读(103) 评论(0) 推荐(0)
摘要:2020-01-12 18:28:13 问题描述: 问题求解: 本题还是非常困难的,至少我在看到这个题目的时候是没有想到怎么解决的。我当时联想到的题目是那条grid走两遍的题目,那条题目也很麻烦,使用的是dp。 本题最难的地方在于如何定义状态,其实本题可以看作是个路径规划问题,所以状态就是左指在的位 阅读全文
posted @ 2020-01-12 18:36 hyserendipity 阅读(363) 评论(0) 推荐(0)
摘要:2020-01-11 17:47:59 问题描述: 问题求解: 本题和另一题target sum非常类似。target sum的要求是在一个数组中随机添加正负号,使得最终得到的结果是target,这个题目被证明和背包问题是同一个问题,只是需要进行一下转化。 本题其实也是一个套壳题目,只是这次的壳套的 阅读全文
posted @ 2020-01-11 17:52 hyserendipity 阅读(238) 评论(0) 推荐(0)
摘要:2020-01-05 11:52:40 问题描述: 问题求解: 好像多次碰到类似的lcs的变种题了,都是套上了回文的壳。这里再次记录一下。 其实本质就是裸的lcs,就出结果了。 阅读全文
posted @ 2020-01-05 11:55 hyserendipity 阅读(478) 评论(1) 推荐(1)
摘要:2020-01-03 13:29:04 问题描述: 问题求解: 经典的动态规划题目,一般来说dp题目是递推关系公式难想,但是实际代码量还是比较少的。 有尝试过dfs来做,但是由于时间复杂度是指数级别的,所以会TLE。 阅读全文
posted @ 2020-01-03 13:32 hyserendipity 阅读(149) 评论(0) 推荐(0)
摘要:2019-11-09 10:31:09 问题描述: 问题求解: n = 100,典型的O(n ^ 3)的动规问题。一般来说这种O(n ^ 3)的问题可以考虑使用区间dp来解决。 区间dp是典型的三层结构,最外围枚举区间长度,中间层枚举起点,最里层枚举截断点,因此区间dp的时间复杂度往往为O(n ^ 阅读全文
posted @ 2019-11-09 10:43 hyserendipity 阅读(310) 评论(0) 推荐(0)
摘要:2019-10-14 22:13:18 问题描述: 问题求解: 解法一:动态规划 这种数组划分的题目基本都可以使用dp来解决,核心的思路就是先维护低的划分,再在中间找分割点加入新的划分。 public int splitArray(int[] nums, int m) { int n = nums. 阅读全文
posted @ 2019-10-14 22:14 hyserendipity 阅读(505) 评论(0) 推荐(0)
摘要:2019-09-07 16:34:48 877. Stone Game 问题描述: 问题求解: 典型的博弈问题,也是一个典型的min-max问题。通常使用算diff的方法把min-max转为求max。 dp[i][j] : i ~ j 玩家 A 和 玩家 B 得分的diff。 1140. Stone 阅读全文
posted @ 2019-09-07 16:36 hyserendipity 阅读(531) 评论(0) 推荐(0)
摘要:2019-07-07 15:48:46 问题描述: 问题求解: 最初看到这个问题的时候第一反应就是这个题目和打破气球的题目很类似。 但是我尝试了使用dp将问题直接转为直接合并到一个堆问题复杂度迅速提高并且并没有ac,这里的思想是和打爆气球一致的,就是找最后合并的部分。 Discuss里给出了可以过的 阅读全文
posted @ 2019-07-07 16:04 hyserendipity 阅读(240) 评论(0) 推荐(0)
摘要:2018-10-26 21:06:54 问题描述: 问题求解: 方法一、BFS 首先将使用BFS进行解空间的遍历,也就是将本问题转化成了搜索问题,但是有两个地方需要注意: 1、状态保存的问题,每个位置的状态由其位置信息和速度信息构成,但是如果将所有的位置出现过的速度进行保存会MLE,这里进行了一步简 阅读全文
posted @ 2018-10-26 21:14 hyserendipity 阅读(286) 评论(0) 推荐(0)
摘要:2018-10-03 19:29:43 问题描述: 问题求解: 很有意思的题目,首先想到的是暴力遍历解空间,当然也用到了memo,可惜还是TLE,因为时间复杂度确实有点过高了,应该是O(n!)。 本题给出了数据规模,基本已经提示了时间复杂度为O(n^3)左右比较合适。下面给出本题的标准解法,使用的是 阅读全文
posted @ 2018-10-03 19:52 hyserendipity 阅读(466) 评论(0) 推荐(0)
摘要:2018-09-13 19:19:44 问题描述: 问题求解: 方法一: 使用动态规划来求解,算法时间复杂度O(n^2)。 dp[i][j] : 以(i, j)为右下角的面积最大的正方形的边长。 初始条件:最上面一行,最左边一列,可以直接得到dp值。 更新公式:matrix[i][j] == '0' 阅读全文
posted @ 2018-09-13 19:28 hyserendipity 阅读(638) 评论(0) 推荐(0)
摘要:2018-09-01 23:02:46 问题求解: 问题求解: 最开始的时候,一眼看过去就是一条 dp 嘛,保存每个数字结尾的长度和,最后求和就好,至于长度如何求,本题中需要用滑动窗口来维护。 很好的题目,将滑动窗口算法和动态规划巧妙的结合了起来。 阅读全文
posted @ 2018-09-01 23:23 hyserendipity 阅读(332) 评论(0) 推荐(0)
摘要:2018-09-01 22:50:59 问题描述: 问题求解: 如果单纯的遍历判断,那么如何去重保证unique是一个很困难的事情,事实上最初我就困在了这个点上。 后来发现是一个动态规划的问题,可以将每个字符结尾的最长长度进行保存,这样就巧妙的解决的重复的问题。 阅读全文
posted @ 2018-09-01 23:01 hyserendipity 阅读(323) 评论(0) 推荐(0)
摘要:2018-09-01 22:38:19 问题描述: 问题求解: 本题如果是第一看到,应该还是非常棘手的,基本没有什么思路。 不妨先从一种简化的版本来考虑。如果仅有一种砖块,那么,填充的方式如下。 从上面可以看出,本质上是一条动态规划问题,递推式就是Fib序列。 那么针对本问题,需要考虑的情况就复杂了 阅读全文
posted @ 2018-09-01 22:47 hyserendipity 阅读(716) 评论(0) 推荐(0)