312. Burst Balloons
2015-12-21 03:58
274 查看
题目:
Given
Find the maximum coins you can collect by bursting the balloons wisely.
Note:
(1) You may imagine
(2) 0 ≤
Example:
Given
Return
链接: http://leetcode.com/problems/burst-balloons/
题解:
射气球游戏,射中气球以后得分是nums[i] * nums[i - 1] * nums[i - 2],之后左右两边气球相连。 这道题思路也很绕,看了dietpepsi的解答也很模糊,跟买卖股票with cooldown一样。方法应该是用dp或者divide and conquer,大概想法是每burst掉一个气球,我们做一遍2d dp。代码并不长,所以我把答案背下来了...擦。理解交给二刷了。
Time Complexity - O(n3), Space Complexity - O(n2)
Reference:
https://leetcode.com/discuss/72216/share-some-analysis-and-explanations https://leetcode.com/discuss/72186/c-dynamic-programming-o-n-3-32-ms-with-comments https://leetcode.com/discuss/72215/java-dp-solution-with-detailed-explanation-o-n-3 https://leetcode.com/discuss/72683/my-c-code-dp-o-n-3-20ms https://leetcode.com/discuss/73288/python-dp-n-3-solutions https://leetcode.com/discuss/72802/share-my-both-dp-and-divide-conquer-solutions https://leetcode.com/discuss/73924/my-36ms-c-solution
Given
nballoons, indexed from
0to
n-1. Each balloon is painted with a number on it represented by array
nums. You are asked to burst all the balloons. If the you burst balloon
iyou will get
nums[left] * nums[i] * nums[right]coins. Here
leftand
rightare adjacent indices of
i. After the burst, the
leftand
rightthen becomes adjacent.
Find the maximum coins you can collect by bursting the balloons wisely.
Note:
(1) You may imagine
nums[-1] = nums = 1. They are not real therefore you can not burst them.
(2) 0 ≤
n≤ 500, 0 ≤
nums[i]≤ 100
Example:
Given
[3, 1, 5, 8]
Return
167
nums = [3,1,5,8] --> [3,5,8] --> [3,8] --> [8] --> [] coins = 3*1*5 + 3*5*8 + 1*3*8 + 1*8*1 = 167
链接: http://leetcode.com/problems/burst-balloons/
题解:
射气球游戏,射中气球以后得分是nums[i] * nums[i - 1] * nums[i - 2],之后左右两边气球相连。 这道题思路也很绕,看了dietpepsi的解答也很模糊,跟买卖股票with cooldown一样。方法应该是用dp或者divide and conquer,大概想法是每burst掉一个气球,我们做一遍2d dp。代码并不长,所以我把答案背下来了...擦。理解交给二刷了。
Time Complexity - O(n3), Space Complexity - O(n2)
public class Solution { public int maxCoins(int[] orgNums) { if(orgNums == null || orgNums.length == 0) { return 0; } int len = orgNums.length + 2; int[] nums = new int[len]; nums[0] = nums[len - 1] = 1; // boundary for(int i = 0; i < orgNums.length; i++) { nums[i + 1] = orgNums[i]; } int[][] dp = new int[len][len]; for(int i = 1; i < len; i++) { // first balloon for(int lo = 0; lo < len - i; lo++) { // left part int hi = lo + i; // right part boundary for(int k = lo + 1; k < hi; k++) { dp[lo][hi] = Math.max(dp[lo][hi], nums[lo] * nums[k] * nums[hi] + dp[lo][k] + dp[k][hi]); } } } return dp[0][len - 1]; } }
Reference:
https://leetcode.com/discuss/72216/share-some-analysis-and-explanations https://leetcode.com/discuss/72186/c-dynamic-programming-o-n-3-32-ms-with-comments https://leetcode.com/discuss/72215/java-dp-solution-with-detailed-explanation-o-n-3 https://leetcode.com/discuss/72683/my-c-code-dp-o-n-3-20ms https://leetcode.com/discuss/73288/python-dp-n-3-solutions https://leetcode.com/discuss/72802/share-my-both-dp-and-divide-conquer-solutions https://leetcode.com/discuss/73924/my-36ms-c-solution
相关文章推荐
- 处理字符串的一些C函数
- isalpha判断字母函数的使用
- PHP(三)变量、常量
- Unity C#脚本热更
- [hdu4285 circuits] 插头dp
- Unity项目结构和版本控制
- 资源管理系统
- aopalliance.jar的用途
- LeetCode - Swap Nodes in Pairs
- poj-1979改-红与黑
- centos7-uninstall vmware
- python计算分位数
- android 滑动返回效果
- 普法知识(44):落实谁办案谁负责
- 期末总结
- linux => Ubuntu 14.04 Web服务器--Apache的安装和配置
- 节点共享型HFSM设计
- rabbitmq
- Word2vec 句向量模型PV-DM与PV-DBOW原论文翻译
- Ubuntu 13.04 安装 VMware Tools,解决无法找到kernel header path的问题