LeetCode动态规划
文章平均质量分 53
Spring_04
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
392. Is Subsequence
392. Is Subsequence 是否是子字符串 题目: 假设两个字符串中都只包含小写字母。t的长度可能很长,s的长度可能很短。子字符串的定义:从字符串中删除若干个字符串后,剩余的字符的相对顺序保持不变得到的新字符串。 解题思路: 遍历s和t,如果对于s中的一个字符,t的当前字符与其不匹配,则t++; 否则,s++,t++。 如果t到了串尾原创 2017-12-21 19:52:37 · 287 阅读 · 0 评论 -
322. Coin Change
322. Coin Change 硬币交换 题目: 给定一个数组,代表可用的硬币的面值,和一个钱数,问我们最小可以用多少个硬币来找零。如果不可以找零,则返回-1。 解题思路: 动态规划。 定义dp[i]为钱数为i时,至少需要多少个硬币。 dp[i]=min(dp[i],dp[i-coins[j]]+1) 注意,要对dp[i]进行初始化为amount+1.原创 2017-12-16 22:15:58 · 377 阅读 · 0 评论 -
375. Guess Number Higher or Lower II
375. Guess Number Higher or Lower II 猜数字大小02 题目: 给定一个数字n,我首先在1-n之间选择一个数字,然后由你去猜这个数字是几,如果你猜错了,我会提示你你的答案比真实答案高了还是低了,直到猜中。 在每次猜错时,你都需支付一定的费用,这个费用就是你猜错的数字的大小。问如果能保证赢,至少要支付多少钱。 解题思路: 动态规划。原创 2017-12-16 22:23:57 · 281 阅读 · 0 评论 -
363. Max Sum of Rectangle No Larger Than K
363. Max Sum of Rectangle No Larger Than K 最大矩形和不超过k 题目: 给定一个矩阵matrix和一个整数k,求元素加和不超过k的最大子矩形。 解题思路: 动态规划。 我们使用暴力搜索。 定义sum[i][j]为矩形(0,0)-(i,j)的和;然后我们遍历这个矩形中的所有的子矩形,计算它与k的大小,并更新结果。 代码:原创 2017-12-16 22:23:10 · 311 阅读 · 0 评论 -
354. Russian Doll Envelopes
354. Russian Doll Envelopes 俄罗斯套娃信件 题目: 给定一个二维数组,每一行[w,h]代表一封信的[长、宽],如果我们像俄罗斯套娃那样套起来(外面的长和宽同时小于里面的长和宽),问一共可以套几封。 解题思路: 动态规划。 定义dp[i]为到第i个信封为止,最多可以有多少个信封。 1、首先我们将数组中的所有信件进行排序:先按照宽由小到大的原创 2017-12-16 22:22:01 · 234 阅读 · 0 评论 -
309. Best Time to Buy and Sell Stock with Cooldown
309. Best Time to Buy and Sell Stock with Cooldown 含有冷冻期的买卖股票的最佳时期 题目: 给定一个数组,代表每天股票的价格,你可以交易任意次,但必须遵循以下规则: ①必须在下一次买之前先卖出去; ②卖出股票的第二天为冷冻期,不能接着买股票 解题思路: buy[i]表示在第i天之前最后一个操作是买,此时的最大收益。原创 2017-12-16 22:20:20 · 318 阅读 · 0 评论 -
304. Range Sum Query 2D - Immutable
304. Range Sum Query 2D - Immutable 二维区域和检索 题目: 给定一个二维数组matrix[][],以及两个坐标点(row1,col1)(row2,col2),求由两个坐标点围成的矩形区域中的元素之和。 解题思路: 利用动态规划的思想。定义dp[i][j]为区间(0,0)-(i,j)这个矩形区域中的所有元素之和。 dp[n+1原创 2017-12-16 22:19:18 · 258 阅读 · 0 评论 -
312. Burst Balloons
312. Burst Balloons 打气球 题目: 打气球的游戏,每个气球都对应着一个数字,每次打爆一个气球,得到的金币数是被打爆的气球的数字和其两边的气球上的数字相乘,如果旁边没有气球了,则按1算,以此类推,求能得到的最多金币数。 解题思路: 使用动态规划。 dp[i][j]表示打爆区间[i,j]中的所有气球能得到的最多金币。原创 2017-12-16 22:17:47 · 239 阅读 · 0 评论 -
377. Combination Sum IV
377. Combination Sum IV 组合和04 题目: 给定一个数组nums,里面没有重复元素;以及一个目标数target,求用nums里面的数加和得到target的组合情况一共有多少种。 解题思路: 动态规划。 定义dp[i]为目标数target为i时,不同组合的个数。 然后我们遍历nums,对于nums中的每一个数a,如果a 代码: class原创 2017-12-16 22:25:56 · 229 阅读 · 0 评论 -
740. Delete and Earn
740. Delete and Earn 删除和收益 题目: 给定一个数组,删除一个数,那么这个数组中比它大1和小1的数都会被删除,与此同时你可以得到这个数对应的分值,问最最多可以得到几分。 解题思路: 1、将所有的数装入相应的桶中value,即相同的数在一个桶中。 2、skip_i:如果你保留i桶,那么0-i号桶的最优解;take_原创 2017-12-23 22:39:43 · 223 阅读 · 0 评论 -
403. Frog Jump
403. Frog Jump 青蛙过河 题目: 一只青蛙正在横渡一条河。这条河分为X个单元,每一个单元可能有或者没有一块石头。青蛙只能跳到石头上而不能跳进水中。 注意: 给定一个升序排列的石头的位置(单元),判断青蛙能否通过登陆最后一块石头成功过河。 初始时,青蛙在第一块石头上,并且假设第一次跳跃必须是一个单元。如果青蛙的最后一次跳跃是k个单位,原创 2017-12-21 19:54:54 · 294 阅读 · 0 评论 -
410. Split Array Largest Sum
410. Split Array Largest Sum 分割数组最大和 题目: 给定一个非负整数的数组和一个整数m,你可以将数组分割为m个非空的子数组,求最小化m个子数组中的最大和。 解题思路: 动态规划。 定义dp[i][j]为:前i个数被分割成j个子数组的最小的最大子数组和。 dp[0][0]=0; j的范围应该是[1,nums原创 2017-12-21 19:56:11 · 199 阅读 · 0 评论 -
416. Partition Equal Subset Sum
416. Partition Equal Subset Sum 相同子集和分割 题目: 给定一个非空数组,判断数组是否可以被分成两个子数组,这两个子数组的和相等。 解题思路: 动态规划。 如果我们可以找到两个子数组相等的情况,那么每个子数组的和应该是和的一半target。定义dp[i]表示数字i是否是原数组的任意个子集合的和,那么我们最后返回dp原创 2017-12-21 19:57:18 · 306 阅读 · 0 评论 -
494. Target Sum
494. Target Sum 目标和 题目: 给定一个非负的整数数组,a1,a2,a3,...,an,以及一个目标值s。现在你有两个符号“+”和“-”,对于每一个整数分配一个符号,找出有多少种符号分配方式使得整数的和等于目标s。 解题思路: 深度优先搜索。 我们从第一个数字,调用递归函数,在递归函数中,分别对目标值进行加上当前数字调用递归,和减原创 2017-12-21 19:59:31 · 206 阅读 · 0 评论 -
446. Arithmetic Slices II - Subsequence
446. Arithmetic Slices II - Subsequence Arithmetic序列 题目: 给定一个数组,判断该数组中有多少Arithmetic子序列。 Arithmetic子序列定义为:长度大于2的,并且每相邻两个元素之间拥有相同的差值。 解题思路: 动态规划。 定义一个一维数组dp,dp中的元素为哈希表,这个哈希表原创 2017-12-21 22:40:00 · 303 阅读 · 0 评论 -
474. Ones and Zeroes
474. Ones and Zeroes 1和0 题目: 给定若干个由0和1组成的字符串数组,现在限定使用m个0和n个1,每个0和1至多使用1次,问最多能组成多少个给定的字符串。 解题思路: 动态规划。 有点类似于0-1背包问题。 dp[i][j]表示有i个0和j个1时最多能组成的字符串的个数。 dp[i][j]=max(dp[i][原创 2017-12-21 22:41:36 · 272 阅读 · 0 评论 -
746. Min Cost Climbing Stairs
746. Min Cost Climbing Stairs 爬楼梯的最小代价 题目: 给定一个数组代表楼梯第i层的代价,初始时可以从cost[0]爬起,也可以从cost[1]开始爬起。一旦你支付费用,便可以爬一步或者两步。求爬完楼梯的最小代价。 解题思路: 动态规划。 dp[i]:代表爬到第i层的最小代价。 dp[i]=cost[i]+mi原创 2017-12-21 22:43:07 · 265 阅读 · 0 评论 -
516. Longest Palindromic Subsequence
516. Longest Palindromic Subsequence 最长回文子序列 题目: 给定一个字符串,求其最长回文子序列。注意:子序列和子字符串不同,不需要连续。 解题思路: 动态规划。 定义dp[i][j]代表[i,j]区间内字符串的最长回文子序列。 dp[i][i]=1 分两种情况: 1、s[i]=s[j]时,d原创 2017-12-21 22:44:07 · 286 阅读 · 0 评论 -
376. Wiggle Subsequence
376. Wiggle Subsequence 摆动子序列 题目: 如果一个序列满足num1num3num5或者num1>num2num4 此题是给定一个数组,求该数组的最长摆动子序列的长度。 解题思路: 贪心算法。 维护两个变量p和q,如果nums[i]>nums[i-1],p=q+1;否则nums[i] 返回的结果是min(nums.length,max(p原创 2017-12-18 22:45:48 · 203 阅读 · 0 评论
分享