![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
动态规划
萌萌,站起来
这个作者很懒,什么都没留下…
展开
-
背包九讲(B站)
01背包有 N 件物品和一个容量是 V 的背包。每件物品只能使用一次。第 i 件物品的体积是 vi,价值是 wi。求解将哪些物品装入背包,可使这些物品的总体积不超过背包容量,且总价值最大。输出最大价值。输入格式第一行两个整数,N,V,用空格隔开,分别表示物品数量和背包容积。接下来有 N 行,每行两个整数 vi,wi,用空格隔开,分别表示第 i 件物品的体积和价值。输出格式输出一个整数,表示最大价值。数据范围0<N,V≤10000<vi,wi≤1000输入样例4 51原创 2020-08-08 18:39:22 · 5358 阅读 · 0 评论 -
leetcode 1014最佳观光组合 (A[i] + A[j] + i - j)最大值 (动态规划)
题目给定正整数数组 A,A[i] 表示第 i 个观光景点的评分,并且两个景点 i 和 j 之间的距离为 j - i。一对景点(i < j)组成的观光组合的得分为(A[i] + A[j] + i - j):景点的评分之和减去它们两者之间的距离。返回一对观光景点能取得的最高分。solution这道题首先想的是暴力,两个for循环,得出所有的组合找最大,超时。可以用动态规划的角度思考,但是不是那么复杂,已知题目要求 res = A[i] + A[j] + i - j (i < j) 的最原创 2020-06-17 19:41:47 · 244 阅读 · 0 评论 -
动态规划之四键键盘 labuladong
先看题目如何在 N 次敲击按钮后得到最多的 A?我们穷举呗,每次有对于每次按 键,我们可以穷举四种可能,很明显就是⼀个动态规划问题。思路一这种思路会很容易理解,但是效率并不⾼,我们直接⾛流程:对于动态规划 问题,⾸先要明⽩有哪些「状态」,有哪些「选择」。 具体到这个问题,对于每次敲击按键,有哪些「选择」是很明显的:4 种, 就是题⽬中提到的四个按键,分别是 A 、 C-A 、 C-C 、 C-V ( Ctrl 简 写为 C )。接下来,思考⼀下对于这个问题有哪些「状态」?或者换句话说,我们需要原创 2020-06-06 20:50:38 · 309 阅读 · 0 评论 -
关于 kmp 算法理解
通过看labuladong算法讲解,自己总结了笔记:概述⽤ pat 表⽰模式串,⻓度为 M , txt 表⽰⽂本串, ⻓度为 N 。KMP 算法是在 txt 中查找⼦串 pat ,如果存在,返回这个 ⼦串的起始索引,否则返回 -1。先看暴力解法:会出现 txt 指针回退现象,KMP 算法花费空间减少时间消耗。KMP 算法永不回退 txt 的指针 i ,不⾛回头路(不会重复扫描 txt ),⽽是借助 dp 数组中储存的信息把 pat 移到正确的位置继续匹 配,时间复杂度只需 O(N),⽤空间换时间,原创 2020-05-31 11:13:39 · 151 阅读 · 0 评论 -
lee 887 高楼扔鸡蛋(待研究)
题⽬是这样:你⾯前有⼀栋从 1 到 N 共 N 层的楼,然后给你 K 个鸡蛋 ( K ⾄少为 1)。现在确定这栋楼存在楼层 0 <= F <= N ,在这层楼将鸡 蛋扔下去,鸡蛋恰好没摔碎(⾼于 F 的楼层都会碎,低于 F 的楼层都不 会碎)。现在问你,最坏情况下,你⾄少要扔⼏次鸡蛋,才能确定这个楼层 F 呢?待研究添加链接描述...原创 2020-05-26 22:21:31 · 98 阅读 · 0 评论 -
lee动态规划 lee5 最长回文子串( 5.22修改 ) lee516 最长回文子序列(可不连续)
给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。示例 1:输入: “babad”输出: “bab”注意: “aba” 也是一个有效答案。示例 2:输入: “cbbd”输出: “bb”动态规划 思考第 1 步:定义状态dp[i][j] 表示子串 s[i, j] 是否为回文子串。第 2 步:思考状态转移方程这一步在做分类讨论(根据头尾字符...原创 2020-05-26 22:20:21 · 231 阅读 · 0 评论 -
leetcode必刷 100 题 (一)(1-10) 【两数之和、两数相加、无重复字符最长子串(滑动窗口)、寻找两个有序数组中位数(未完成)、最长回文子串】
lee 1 两数之和给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。示例:给定 nums = [2, 7, 11, 15], target = 9因为 nums[0] + nums[1] = 2 + 7 = 9所以返回 [0, 1]...原创 2020-03-02 17:17:21 · 321 阅读 · 0 评论 -
玩转贪心算法 动态规划lee 435无重叠区间 lee452 引爆气球 interval schedule
给定一个区间的集合,找到需要移除区间的最小数量,使剩余区间互不重叠。注意:可以认为区间的终点总是大于它的起点。区间 [1,2] 和 [2,3] 的边界相互“接触”,但没有相互重叠。示例 1:输入: [ [1,2], [2,3], [3,4], [1,3] ]输出: 1解释: 移除 [1,3] 后,剩下的区间没有重叠。示例 2:输入: [ [1,2], [1,2], [1,2] ]...原创 2020-02-22 17:13:13 · 443 阅读 · 0 评论 -
玩转lee139 单词拆分 不太明白
给定一个非空字符串 s 和一个包含非空单词列表的字典 wordDict,判定 s 是否可以被空格拆分为一个或多个在字典中出现的单词。说明:拆分时可以重复使用字典中的单词。你可以假设字典中没有重复的单词。示例 1:输入: s = “leetcode”, wordDict = [“leet”, “code”]输出: true解释: 返回 true 因为 “leetcode” 可以被拆分成...原创 2020-02-21 14:35:20 · 128 阅读 · 0 评论 -
玩转lee474 一和零 0-1背包问题
在计算机界中,我们总是追求用有限的资源获取最大的收益。现在,假设你分别支配着 m 个 0 和 n 个 1。另外,还有一个仅包含 0 和 1 字符串的数组。你的任务是使用给定的 m 个 0 和 n 个 1 ,找到能拼出存在于数组中的字符串的最大数量。每个 0 和 1 至多被使用一次。注意:给定 0 和 1 的数量都不会超过 100。给定字符串数组的长度不会超过 600。示例 1:输入:...原创 2020-02-21 13:25:43 · 134 阅读 · 0 评论 -
玩转 0-1背包问题 lee377 组合总和(完全背包)
动态规划横轴是容量,纵轴是物品id求解问题的过程就是维护这个表的过程,求解的值,就是最后一个空格的值首先对于第0号物品容量为0时,由于自身重量为1,所以放不进去,所以空格填0,容量为1以后,该物品可以放进去了,就都为6根据bobo老师写的代码:public class bag_0_1 { public static int bagquestion (int c, int[]...原创 2020-02-21 12:25:38 · 373 阅读 · 0 评论 -
玩转动态规划 lee416分割等和子集 0-1背包
给定一个只包含正整数的非空数组。是否可以将这个数组分割成两个子集,使得两个子集的元素和相等。注意:每个数组中的元素不会超过 100数组的大小不会超过 200示例 1:输入: [1, 5, 11, 5]输出: true解释: 数组可以分割成 [1, 5, 5] 和 [11].示例 2:输入: [1, 2, 3, 5]输出: false解释: 数组不能分割成两个元素和相等的子集....原创 2020-02-20 22:03:12 · 125 阅读 · 0 评论 -
玩转动态规划 lee376 摆动序列
如果连续数字之间的差严格地在正数和负数之间交替,则数字序列称为摆动序列。第一个差(如果存在的话)可能是正数或负数。少于两个元素的序列也是摆动序列。例如, [1,7,4,9,2,5] 是一个摆动序列,因为差值 (6,-3,5,-7,3) 是正负交替出现的。相反, [1,4,7,2,5] 和 [1,7,4,5,5] 不是摆动序列,第一个序列是因为它的前两个差值都是正数,第二个序列是因为它的最后一个差...原创 2020-02-19 17:25:33 · 165 阅读 · 0 评论 -
玩转动态规划 lee300 (LIS)最长上升子序列
给定一个无序的整数数组,找到其中最长上升子序列的长度。示例:输入: [10,9,2,5,3,7,101,18]输出: 4解释: 最长的上升子序列是 [2,3,7,101],它的长度是 4。说明:可能会有多种最长上升子序列的组合,你只需要输出对应的长度即可。你算法的时间复杂度应该为 O(n2) 。进阶: 你能将算法的时间复杂度降低到 O(n log n) 吗?需要读清的题意什么...原创 2020-02-19 16:45:19 · 155 阅读 · 0 评论 -
lee322 凑零钱问题 动态规划
给定不同面额的硬币 coins 和一个总金额 amount。编写一个函数来计算可以凑成总金额所需的最少的硬币个数。如果没有任何一种硬币组合能组成总金额,返回 -1。示例 1:输入: coins = [1, 2, 5], amount = 11输出: 3解释: 11 = 5 + 5 + 1示例 2:输入: coins = [2], amount = 3输出: -1说明:你可以认为每...原创 2020-02-19 15:08:29 · 260 阅读 · 0 评论 -
玩转lee309 最佳买卖股票时机含冷冻期里面包含股票所有问题 6道
给定一个整数数组,其中第 i 个元素代表了第 i 天的股票价格 。设计一个算法计算出最大利润。在满足以下约束条件下,你可以尽可能地完成更多的交易(多次买卖一支股票):你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。卖出股票后,你无法在第二天买入股票 (即冷冻期为 1 天)。示例:输入: [1,2,3,0,2]输出: 3解释: 对应的交易状态为: [买入, 卖出, 冷冻...原创 2020-02-18 13:56:21 · 124 阅读 · 0 评论 -
玩转lee198 打家劫舍 lee213 打家劫舍2 头尾不行 没看懂动态规划函数 lee337 打家劫舍3 二叉树不相邻节点
你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你在不触动警报装置的情况下,能够偷窃到的最高金额。示例 1:输入: [1,2,3,1]输出: 4解释: 偷窃 1 号房屋 (金额 = 1) ,然后偷窃 3 号...原创 2020-02-16 17:01:18 · 157 阅读 · 0 评论 -
玩转动态规划 lee62不同路径 从左上到右下 有障碍物
一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。问总共有多少条不同的路径?例如,上图是一个7 x 3 的网格。有多少可能的路径?说明:m 和 n 的值均不超过 100。示例 1:输入: m = 3, n = 2输出: 3解释:从左上角开始,总...原创 2020-02-14 21:04:57 · 647 阅读 · 0 评论 -
玩转动态规划 lee91解码方法 a-1b-2 看有多少种情况
一条包含字母 A-Z 的消息通过以下方式进行了编码:‘A’ -> 1‘B’ -> 2…‘Z’ -> 26给定一个只包含数字的非空字符串,请计算解码方法的总数。示例 1:输入: “12”输出: 2解释: 它可以解码为 “AB”(1 2)或者 “L”(12)。示例 2:输入: “226”输出: 3解释: 它可以解码为 “BZ” (2 26), “VF” (2...原创 2020-02-14 18:06:52 · 294 阅读 · 0 评论 -
玩转动态规划 lee64 最小路径和 从左上到右下
给定一个包含非负整数的 m x n 网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。说明:每次只能向下或者向右移动一步。示例:输入:[[1,3,1],[1,5,1],[4,2,1]]输出: 7解释: 因为路径 1→3→1→1→1 的总和最小。思路 我的想法和三角形那个类似我的代码:class Solution { public int minP...原创 2020-02-13 17:36:15 · 193 阅读 · 0 评论 -
玩转动态规划 lee120 三角形最小路径和
给定一个三角形,找出自顶向下的最小路径和。每一步只能移动到下一行中相邻的结点上。例如,给定三角形:[[2],[3,4],[6,5,7],[4,1,8,3]]自顶向下的最小路径和为 11(即,2 + 3 + 5 + 1 = 11)。说明:如果你可以只使用 O(n) 的额外空间(n 为三角形的总行数)来解决这个问题,那么你的算法会很加分。动态规划看了答案以后的动态规划 不...原创 2020-02-13 16:11:09 · 95 阅读 · 0 评论 -
lee279完全平方数
给定正整数 n,找到若干个完全平方数(比如 1, 4, 9, 16, …)使得它们的和等于 n。你需要让组成和的完全平方数的个数最少。示例 1:输入: n = 12输出: 3解释: 12 = 4 + 4 + 4.示例 2:输入: n = 13输出: 2解释: 13 = 4 + 9.思考没有解怎么办?不可能 都能表达 因为1是完全平方数 所以最少可以n个1相加直觉解法 贪心...原创 2020-01-23 23:41:18 · 114 阅读 · 0 评论 -
new 剪绳子
给你一根长度为n的绳子,请把绳子剪成m段(m、n都是整数,n>1并且m>1),每段绳子的长度记为k[0],k[1],…,k[m]。请问k[0]xk[1]x…xk[m]可能的最大乘积是多少?例如,当绳子的长度是8时,我们把它剪成长度分别为2、3、3的三段,此时得到的最大乘积是18。输入描述:输入一个数n,意义见题面。(2 <= n <= 60)示例1输入8输出1...原创 2019-10-30 15:28:23 · 94 阅读 · 0 评论 -
new 连续子数组的最大和
HZ偶尔会拿些专业问题来忽悠那些非计算机专业的同学。今天测试组开完会后,他又发话了:在古老的一维模式识别中,常常需要计算连续子向量的最大和,当向量全为正数的时候,问题很好解决。但是,如果向量中包含负数,是否应该包含某个负数,并期望旁边的正数会弥补它呢?例如:{6,-3,-2,7,-15,1,2,2},连续子向量的最大和为8(从第0个开始,到第3个为止)。给一个数组,返回它的最大连续子序列的和,你会...原创 2019-10-18 20:35:59 · 50 阅读 · 0 评论