动态规划
文章平均质量分 52
小马哥MAX
刷题记录BLOG
展开
-
【两次过】Lintcode 191. 乘积最大子序列
找出一个序列中乘积最大的连续子序列(至少包含一个数)。样例样例 1:输入:[2,3,-2,4]输出:6样例 2:输入:[-1,2,4,1]输出:8解题思路1:常规思路两遍遍历,时间复杂度O(n^2)public class Solution { /** * @param nums: An array of integers *...原创 2019-07-06 10:37:25 · 190 阅读 · 0 评论 -
【一次过】【背包】Lintcode 125. 背包问题 II
给出n个物品的体积A[i]和其价值V[i],将他们装入一个大小为m的背包,最多能装入的总价值有多大?样例对于物品体积[2, 3, 5, 7]和对应的价值[1, 5, 2, 4], 假设背包大小为10的话,最大能够装入的价值为9。挑战O(n x m) memory is acceptable, can you do it in O(m) memory?注意事项A[i], V[...原创 2019-04-22 09:00:13 · 158 阅读 · 0 评论 -
【两次过】【2017网易】【背包】双核处理
链接:https://www.nowcoder.com/questionTerminal/9ba85699e2824bc29166c92561da77fa来源:牛客网一种双核CPU的两个核能够同时的处理任务,现在有n个已知数据量的任务需要交给CPU处理,假设已知CPU的每个核1秒可以处理1kb,每个核同时只能处理一项任务。n个任务可以按照任意顺序放入CPU进行处理,现在需要设计一个方案让...原创 2019-04-21 20:15:13 · 136 阅读 · 0 评论 -
【三次过】【序列型】Lintcode 667. 最长的回文序列
给一字符串 s, 找出在 s 中的最长回文序列的长度. 你可以假设 s 的最大长度为1000.样例Example1Input: "bbbab"Output: 4Explanation:One possible longest palindromic subsequence is "bbbb".Example2Input: "bbbbb"Output: 5解题...原创 2019-04-21 11:04:57 · 464 阅读 · 0 评论 -
【一次过】【2017网易】买苹果
小易去附近的商店买苹果,奸诈的商贩使用了捆绑交易,只提供6个每袋和8个每袋的包装(包装不可拆分)。 可是小易现在只想购买恰好n个苹果,小易想购买尽量少的袋数方便携带。如果不能购买恰好n个苹果,小易将不会购买。输入描述:输入一个整数n,表示小易想购买n(1 ≤ n ≤ 100)个苹果输出描述:输出一个整数表示最少需要购买的袋数,如果不能买恰好n个苹果则输出-1输入例子1:...原创 2019-04-10 09:47:19 · 126 阅读 · 0 评论 -
【三次过】Lintcode 108. 分割回文串 II
给定一个字符串s,将s分割成一些子串,使每个子串都是回文。返回s符合要求的的最少分割次数。样例比如,给出字符串s ="aab",返回 1, 因为进行一次分割可以将字符串s分割成["aa","b"]这样两个回文子串解题思路:动态规划。状态定义:dp[i]表示以下标i结尾的字符串,最少分割dp[i]次,使得子串都是回文串初始化:如果s[0...i]区间就是回文...原创 2019-04-13 10:23:42 · 199 阅读 · 0 评论 -
【三次过】【2017网易】跳石板
小易来到了一条石板路前,每块石板上从1挨着编号为:1、2、3.......这条石板路要根据特殊的规则才能前进:对于小易当前所在的编号为K的 石板,小易单次只能往前跳K的一个约数(不含1和K)步,即跳到K+X(X为K的一个非1和本身的约数)的位置。 小易当前处在编号为N的石板,他想跳到编号恰好为M的石板去,小易想知道最少需要跳跃几次可以到达。例如:N = 4,M = 24:4->6-&...原创 2019-04-09 11:07:32 · 168 阅读 · 0 评论 -
【三次过】Lintcode 1284. 整数拆分
给定一个正整数 n ,将其拆分成至少两个正整数之和,并且使这些整数之积最大。返回这个最大乘积。样例样例1输入: 2输出: 1解释: 2 = 1 + 1样例2输入: 10输出: 36解释: 10 = 3 + 3 + 4注意事项你可以认为 n 不小于 2 ,并且不大于 58。解题思路:当不知从何下手时,可以先举例子看规律,例如求正整数4的最大乘积...原创 2019-04-03 10:20:53 · 357 阅读 · 0 评论 -
【三次过】Lintcode 107. 单词拆分 I
给定字符串 s 和单词字典 dict,确定 s 是否可以分成一个或多个以空格分隔的子串,并且这些子串都在字典中存在。样例样例 1: 输入: "lintcode", ["lint", "code"] 输出: true样例 2: 输入: "a", ["a"] 输出: true解题思路:首先我们要存储的历史信息res[i]是表示到字符串s的第i个元素为止能不能用字典中...原创 2019-04-03 09:35:11 · 424 阅读 · 0 评论 -
【两次过】Lintcode 1242. 无重叠区间
给定一些区间,找到需要移除的最小区间数,以使其余的区间不重叠。样例样例1:输入: [ [1,2], [2,3], [3,4], [1,3] ]输出: 1解释: [1,3] 被移除后,剩下的区间将不再重叠。样例2:输入: [ [1,2], [1,2], [1,2] ]输出: 2解释: 需要将两个 [1,2] 移除使得剩下的区间不重合。样例3:输入...原创 2019-04-08 09:54:55 · 277 阅读 · 0 评论 -
【两次过】【背包】Lintcode 563. 背包问题 V
给出 n 个物品, 以及一个数组,nums[i]代表第i个物品的大小, 保证大小均为正数, 正整数target表示背包的大小, 找到能填满背包的方案数。每一个物品只能使用一次样例给出候选物品集合[1,2,3,3,7]以及 target7结果的集合为:[7][1,3,3]返回2解题思路:与Lintcode 588. 划分和相等的子集类似,只不过从是否能...原创 2019-04-22 09:48:32 · 509 阅读 · 0 评论 -
【两次过】矩形覆盖
题目描述我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?解题思路:设dp[i]为用i个2*1的小矩形无重叠地覆盖一个2*i的大矩形,总共有dp[i]种方法.考虑两种情况:当小矩形竖着时,则有dp[i-1]种方法当小矩形横着放时,则下面一格也只能横着放一个,一共占据2格,则有dp[i-2]种方法综...原创 2019-04-15 10:05:00 · 138 阅读 · 0 评论 -
【三次过】Lintcode 42. 最大子数组 II
给定一个整数数组,找出两个不重叠子数组使得它们的和最大。每个子数组的数字在数组中的位置应该是连续的。返回最大的和。样例给出数组[1, 3, -1, 2, -1, 2]这两个子数组分别为[1, 3]和[2, -1, 2]或者[1, 3, -1, 2]和[2],它们的最大和都是7挑战要求时间复杂度为 O(n)注意事项子数组最少包含一个数解题思路1...原创 2018-08-16 10:45:03 · 183 阅读 · 0 评论 -
【两次过】Lintcode 41:最大子数组
给定一个整数数组,找到一个具有最大和的子数组,返回其最大和。样例样例1:输入:[−2,2,−3,4,−1,2,1,−5,3]输出:6解释:符合要求的子数组为[4,−1,2,1],其最大和为 6。样例2:输入:[1,2,3,4]输出:10解释:符合要求的子数组为[1,2,3,4],其最大和为 10。挑战要求时间复杂度为O(n)注意事项子数组最少包含...原创 2018-01-27 19:39:50 · 242 阅读 · 0 评论 -
【两次过】Lintcode 4. 丑数 II
设计一个算法,找出只含素因子2,3,5的第n小的数。符合条件的数如:1, 2, 3, 4, 5, 6, 8, 9, 10, 12...样例如果n = 9, 返回10挑战要求时间复杂度为O(nlogn)或者O(n)注意事项我们可以认为1也是一个丑数解题思路:暴力解法不做介绍大家都可以想到,在该题会time limited。换一种思路是:所有的肯定都是由2,...原创 2018-08-25 11:24:25 · 152 阅读 · 0 评论 -
【一次过】Lintcode 394. 硬币排成线
有n个硬币排成一条线。两个参赛者轮流从右边依次拿走 1 或 2 个硬币,直到没有硬币为止。拿到最后一枚硬币的人获胜。请判定先手玩家必胜还是必败?若必胜, 返回true, 否则返回false.样例样例 1:输入: 1输出: true样例 2:输入: 4输出: true解释: 先手玩家第一轮拿走一个硬币, 此时还剩三个.这时无论后手玩家拿一个还是...原创 2019-04-19 10:39:39 · 267 阅读 · 0 评论 -
【两次过】【完全背包】Lintcode 801. 背包问题X
你总共有n元,商人总共有三种商品,它们的价格分别是150元,250元,350元,三种商品的数量可以认为是无限多的,购买完商品以后需要将剩下的钱给商人作为小费,求最少需要给商人多少小费样例Example 1: Input: n = 900 Output: 0Example 2: Input: 800 Output: 50解题思路:完全背包问题,解决方法与01背包的...原创 2019-04-23 10:30:08 · 231 阅读 · 0 评论 -
【一次过】【完全背包】Lintcode 562. 背包问题 IV
给出 n 个物品, 以及一个数组,nums[i]代表第i个物品的大小, 保证大小均为正数并且没有重复, 正整数target表示背包的大小, 找到能填满背包的方案数。每一个物品可以使用无数次样例样例1输入: nums = [2,3,6,7] 和 target = 7输出: 2解释:方案有: [7][2, 2, 3]样例2输入: nums = [2,3,4,5...原创 2019-04-23 10:26:18 · 488 阅读 · 0 评论 -
【三次过】Lintcode 118. 不同的子序列
给出字符串S和字符串T,计算S的不同的子序列中T出现的个数。子序列字符串是原始字符串通过删除一些(或零个)产生的一个新的字符串,并且对剩下的字符的相对位置没有影响。(比如,“ACE”是“ABCDE”的子序列字符串,而“AEC”不是)。样例给出S ="rabbbit", T ="rabbit"返回 3挑战Do it in O(n2) time and O(n) memo...原创 2019-04-18 10:42:24 · 285 阅读 · 0 评论 -
【两次过】Lintcode 109. 数字三角形
给定一个数字三角形,找到从顶部到底部的最小路径和。每一步可以移动到下面一行的相邻数字上。样例example 1Given the following triangle:[ [2], [3,4], [6,5,7], [4,1,8,3]]The minimum path sum from top to bottom is 11 (i.e., 2 + ...原创 2019-04-18 09:54:51 · 199 阅读 · 0 评论 -
【多次过】【2017美团】【背包】拼凑硬币
给你六种面额 1、5、10、20、50、100 元的纸币,假设每种币值的数量都足够多,编写程序求组成N元(N为0~10000的非负整数)的不同组合的个数。解题思路:import java.util.Scanner;import java.util.Arrays;public class Main{ public static long count(int n){ ...原创 2019-04-17 21:54:31 · 347 阅读 · 0 评论 -
【两次过】Lintcode 77. 最长公共子序列
给出两个字符串,找到最长公共子序列(LCS),返回LCS的长度。样例样例 1: 输入: "ABCD" and "EDCA" 输出: 1 解释: LCS 是 'A' 或 'D' 或 'C'样例 2: 输入: "ABCD" and "EACB" 输出: 2 解释: LCS 是 "AC"解题思路:动态规划。例子:ABCD和ABDBCDF...原创 2019-04-02 09:53:34 · 212 阅读 · 0 评论 -
【两次过】Lintcode 79. 最长公共子串
给出两个字符串,找到最长公共子串,并返回其长度。样例样例 1: 输入: "ABCD" and "CBCE" 输出: 2 解释: 最长公共子串是 "BC"样例 2: 输入: "ABCD" and "EACB" 输出: 1 解释: 最长公共子串是 'A' 或 'C' 或 'B'挑战O(n x m) time and memory.注意...原创 2019-04-02 09:37:17 · 169 阅读 · 0 评论 -
【两次过】【背包】Lintcode 588. 划分和相等的子集
给一只含有正整数的非空数组, 找到这个数组是否可以划分为两个元素和相等的子集。样例例1:输入: nums = [1, 5, 11, 5], 输出: true解释:two subsets: [1, 5, 5], [11]例2:输入: nums = [1, 2, 3, 9], 输出: false注意事项所有数组元素不超过100.数组大小不超过2...原创 2019-04-07 10:14:20 · 299 阅读 · 0 评论 -
【两次过】【坐标型】Lintcode 553. 炸弹袭击
给一个二维矩阵, 每一个格子都可能是一堵墙W, 一个敌人E或者空0(数字 '0'), 返回你可以用一个炸弹杀死的最大敌人数. 炸弹会杀死所有在同一行和同一列没有墙阻隔的敌人, 因为墙比较坚固难以摧毁.样例给一个矩阵:0 E 0 0E 0 W E0 E 0 0返回3.(在(1, 1)处放炸弹可以杀死 3 个敌人)注意事项你只能在空的地方放置炸弹.解题思...原创 2018-10-22 10:07:21 · 382 阅读 · 0 评论 -
【一次过】【序列型】Lintcode 1054. 最少费用的爬台阶方法
在楼梯上,每一号台阶都有各自的费用,即第 i 号台阶有非负成本cost [i](台阶从0号索引)。一旦你支付了费用,你可以爬一到两步。 你需要找到最低成本来到达最高层,你可以从索引为0的楼梯开始,也可以从索引为1的楼梯开始。样例案例 1:输入: cost = [10, 15, 20]输出: 15解释: 最便宜的方法是从第1号台阶起步,支付费用并直接到达顶层。案例 2:...原创 2018-10-10 21:12:11 · 271 阅读 · 0 评论 -
【一次过】【序列型】Lintcode 111. 爬楼梯
假设你正在爬楼梯,需要n步你才能到达顶部。但每次你只能爬一步或者两步,你能有多少种不同的方法爬到楼顶部?样例比如n=3,1+1+1=1+2=2+1=3,共有3种不同的方法返回 3解题思路:动态规划。设dp(n)为爬到第n阶楼梯的方法数目,则递推式为:dp(n) = dp(n-1) + dp(n-2)递推出口:dp(0) = 0 ; dp(1) = 1 ; dp(2) =...原创 2018-07-17 19:12:59 · 181 阅读 · 0 评论 -
【一次过】Lintcode 392. 打劫房屋
假设你是一个专业的窃贼,准备沿着一条街打劫房屋。每个房子都存放着特定金额的钱。你面临的唯一约束条件是:相邻的房子装着相互联系的防盗系统,且当相邻的两个房子同一天被打劫时,该系统会自动报警。给定一个非负整数列表,表示每个房子中存放的钱, 算一算,如果今晚去打劫,你最多可以得到多少钱在不触动报警装置的情况下。样例给定[3, 8, 4], 返回8.挑战O(n) 时间复杂度 且...原创 2018-10-10 19:38:09 · 192 阅读 · 0 评论 -
【一次过】【坐标型】Lintcode 115. 不同的路径 II
"不同的路径" 的跟进问题:现在考虑网格中有障碍物,那样将会有多少条不同的路径?网格中的障碍和空位置分别用 1 和 0 来表示。样例如下所示在3x3的网格中有一个障碍物:[ [0,0,0], [0,1,0], [0,0,0]]一共有2条不同的路径从左上角到右下角。注意事项m 和 n 均不超过100解题思路:和Lintcode 114. 不同...原创 2018-10-16 10:12:08 · 262 阅读 · 0 评论 -
【两次过】Lintcode 116. 跳跃游戏
给出一个非负整数数组,你最初定位在数组的第一个位置。 数组中的每个元素代表你在那个位置可以跳跃的最大长度。 判断你是否能到达数组的最后一个位置。样例A =[2,3,1,1,4],返回 true.A =[3,2,1,0,4],返回 false.注意事项这个问题有两个方法,一个是贪心和动态规划。贪心方法时间复杂度为O(N)。动态规划方法的时间复杂度为...原创 2018-10-15 09:20:28 · 141 阅读 · 0 评论 -
【一次过】【坐标型】Lintcode 114. 不同的路径
有一个机器人的位于一个m×n个网格左上角。机器人每一时刻只能向下或者向右移动一步。机器人试图达到网格的右下角。问有多少条不同的路径?样例给出 m =3和 n =3, 返回6.给出 m =4和 n =5, 返回35.注意事项n和m均不超过100解题思路:是Lintcode 110. 最小路径和的简单版本。确定状态:最后一步:无论机器人...原创 2018-10-14 10:39:16 · 155 阅读 · 0 评论 -
【多次过】【背包】Lintcode 669. 换硬币
给出不同面额的硬币以及一个总金额. 写一个方法来计算给出的总金额可以换取的最少的硬币数量. 如果已有硬币的任意组合均无法与总金额面额相等, 那么返回-1.样例给出 coins =[1, 2, 5], amount = 11返回3(11 = 5 + 5 + 1)给出 coins =[2], amount = 3返回-1注意事项你可以假设每种硬币均有无数个解题思路...原创 2018-10-14 10:08:23 · 698 阅读 · 0 评论 -
【两次过】Lintcode 149. 买卖股票的最佳时机
假设有一个数组,它的第i个元素是一支给定的股票在第i天的价格。如果你最多只允许完成一次交易(例如,一次买卖股票),设计一个算法来找出最大利润。样例给出一个数组样例[3,2,3,1,2], 返回 1解题思路1:贪心算法,顺序扫描股票价格,找到截至当天最低的股票价格MinPrice,最高的利润profit。public class Solution { /** ...原创 2018-10-13 09:54:46 · 165 阅读 · 0 评论 -
【两次过】【序列型】Lintcode 512. 解码方法
有一个消息包含A-Z通过以下规则编码'A' -> 1'B' -> 2...'Z' -> 26现在给你一个加密过后的消息,问有几种解码的方式样例给你的消息为12,有两种方式解码 AB(12) 或者 L(12). 所以返回 2解题思路:序列型动态规划。对于序列计数型问题,一般dp[i]代表前i个,而不包括第i个,所以新建dp数组,一般需要多建一个。...原创 2018-10-20 10:37:32 · 225 阅读 · 0 评论 -
【两次过】Lintcode 1300. Nim博弈
你正在和朋友进行Nim博弈:桌子上有一堆石头,每一次你们都会从中拿出1到3个石头。拿走最后一个石头的人赢得博弈。博弈开始时,你是先手。假设两个人都绝对理性,都会做出最优决策。给定石头的数量,判断你是否会赢得比赛。举例:有四个石头,那么你永远不会赢得比赛。不管拿几个,最后一个石头一定会被你的朋友拿走。样例样例 1:输入:n = 4 输出:False解析:先手取走1,2...原创 2018-10-21 11:01:54 · 147 阅读 · 0 评论 -
【三次过】【2017腾讯】构造回文
给定一个字符串s,你可以从中删除一些字符,使得剩下的串是一个回文串。如何删除才能使得回文串最长呢?输出需要删除的字符个数。输入描述:输入数据有多组,每组包含一个字符串s,且保证:1<=s.length<=1000.输出描述:对于每组数据,输出一个整数,代表最少需要删除的字符个数。输入例子1:abcdagoogle...原创 2019-04-06 20:47:49 · 155 阅读 · 0 评论 -
【两次过】1164. 摆动序列
如果连续数字之间的差严格地在正和负之间交替,则这样的数字序列称为摆动序列。 第一个差值(如果存在)可以是正的也可以是负的。 少于两个元素的序列通常是摆动序列。例如,[1,7,4,9,2,5]是一个摆动序列,因为连续数字的差(6,-3,5,-7,3)交替为正和负。 相反,[1,4,7,2,5]和[1,7,4,5,5]不是摆动序列,第一个是因为它的前两个连续数字的差是正的,而第二个是因为它的最后一...原创 2019-04-06 10:54:08 · 280 阅读 · 0 评论 -
【两次过】Lintcode 92. 背包问题
在n个物品中挑选若干物品装入背包,最多能装多满?假设背包的大小为m,每个物品的大小为A[i]样例样例 1: 输入: [3,4,8,5], backpack size=10 输出: 9样例 2: 输入: [2,3,5,7], backpack size=12 输出: 12 挑战O(n x m) time and O(m) memory.O(n x m) ...原创 2019-04-06 09:28:24 · 384 阅读 · 0 评论 -
【两次过】Lintcode 534. 打劫房屋 II
在上次打劫完一条街道之后,窃贼又发现了一个新的可以打劫的地方,但这次所有的房子围成了一个圈,这就意味着第一间房子和最后一间房子是挨着的。每个房子都存放着特定金额的钱。你面临的唯一约束条件是:相邻的房子装着相互联系的防盗系统,且 当相邻的两个房子同一天被打劫时,该系统会自动报警。给定一个非负整数列表,表示每个房子中存放的钱, 算一算,如果今晚去打劫,在不触动报警装置的情况下, 你最多可以得到多少...原创 2019-04-05 11:01:21 · 190 阅读 · 0 评论 -
【两次过】Lintcode 436. 最大正方形
在一个二维01矩阵中找到全为1的最大正方形, 返回它的面积.样例样例 1:输入:[ [1, 0, 1, 0, 0], [1, 0, 1, 1, 1], [1, 1, 1, 1, 1], [1, 0, 0, 1, 0]]输出: 4样例 2:输入: [ [0, 0, 0], [1, 1, 1]]输出: 1解题思路:动态规划。设定...原创 2019-03-22 09:53:22 · 178 阅读 · 0 评论