LeetCode 312. 戳气球(Java)
题目
有 n 个气球,编号为0 到 n - 1,每个气球上都标有一个数字,这些数字存在数组 nums 中。
现在要求你戳破所有的气球。戳破第 i 个气球,你可以获得 nums[i - 1] *
nums[i] *
nums[i + 1] 枚硬币。 这里的 i - 1 和 i + 1 代表和 i 相邻的两个气球的序号。如果 i - 1或 i + 1 超出了数组的边界,那么就当它是一个数字为 1 的气球。
求所能获得硬币的最大数量。
示例
输入:nums = [3,1,5,8]
输出: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
思路(动态规划)
每戳破一个气球 nums[i]nums[i]nums[i] ,能获得的硬币数量就是 nums[i−1]∗nums[i]∗nums[i+1]nums[i-1] * nums[i] * nums[i+1]nums[i−1]∗nums[i]∗nums[i+1]
为了考虑越界,就再开一个数组 arr[nums.length+2]arr[nums.length+2]arr[nums.length+2],来存两个边界 1
我们可以枚举最后一个戳爆的气球
定义dp数组,dp[i][j]dp[ i ][ j ]dp[i][j] 表示 戳破 (i,j)(i,j)(i,j) 之间的所有气球,0<=i<n+10 <= i < n+10<=i<n+1
注意如果 i<=ji <= ji<=j 中间是没有气球的,因为是开区间所以k的左右两边的区间不会影响k
采用从下至上和从左往右的遍历方式
代码
class Solution {public int maxCoins(int[] nums) {int len = nums.length;// 定义两个边界考虑到越界情况int[] arr = new int[len+2];// 越界只能获得1个硬币arr[0] = arr[len+1] = 1;for(int i = 1; i < len+1; i++) {arr[i] = nums[i-1];}int[][] dp = new int[len+2][len+2];// 从下往上枚举for (int i = len+1; i >= 0; i--) {// 从左往右枚举 (i < j)for(int j = i+1; j < len+2; j++) {// k要在(i,j)范围内// 枚举最后一个戳爆的气球for (int k = i + 1; k < j; k++) {dp[i][j] = Math.max(dp[i][j],dp[i][k] + dp[k][j] + arr[i]*arr[k]*arr[j]);}}}return dp[0][len+1];}
}
LeetCode 312. 戳气球(Java)相关推荐
- Leetcode.312 戳气球
题目链接 Leetcode.312 戳气球 题目描述 有 n个气球,编号为0到 n - 1,每个气球上都标有一个数字,这些数字存在数组 nums中. 现在要求你戳破所有的气球.戳破第 i 个气球,你可 ...
- LeetCode 312.戳气球
LeetCode 312.戳气球 有 n 个气球,编号为0 到 n - 1,每个气球上都标有一个数字,这些数字存在数组 nums 中. 现在要求你戳破所有的气球.戳破第 i 个气球,你可以获得 num ...
- Java实现 LeetCode 312 戳气球
312. 戳气球 有 n 个气球,编号为0 到 n-1,每个气球上都标有一个数字,这些数字存在数组 nums 中. 现在要求你戳破所有的气球.每当你戳破一个气球 i 时,你可以获得 nums[left ...
- leetcode: 312. 戳气球
312. 戳气球 来源:力扣(LeetCode) 链接: https://leetcode.cn/problems/burst-balloons/ 有 n 个气球,编号为0 到 n - 1,每个气球上 ...
- LeetCode·312.戳气球·动态规划
312.戳气球 题目 示例 思路 首先必须要说明,这个题目的状态转移方程真的比较巧妙,所以说如果你看了题目之后完全没有思路恰恰是正常的.虽然最优答案不容易想出来,但基本的思路分析是我们应该力求做到的. ...
- Leetcode 312. 戳气球
题目 首先必须要说明,这个题目的状态转移方程真的比较巧妙,所以说如果你看了题目之后完全没有思路恰恰是正常的.虽然最优答案不容易想出来,但基本的思路分析是我们应该力求做到的.所以本文会先分析一下常规思路 ...
- LeetCode 312. 戳气球(DP,难)
1. 题目 有 n 个气球,编号为0 到 n-1,每个气球上都标有一个数字,这些数字存在数组 nums 中. 现在要求你戳破所有的气球.每当你戳破一个气球 i 时,你可以获得 nums[left]∗n ...
- LeetCode 312. 戳气球(Burst Balloons)
题目描述: 有 n 个气球,编号为0 到 n-1,每个气球上都标有一个数字,这些数字存在数组 nums 中. 现在要求你戳破所有的气球.每当你戳破一个气球 i 时,你可以获得 nums[left] * ...
- Leetcode 312. 戳气球(经典区间dp)
为了避免边界问题,我们重新开一个数组,在两个端点加入哨兵1.此时数组下标为0到n+1 状态的定义如下,f[i][j] 表示将区间[i+1,j-1]的气球全部戳爆的最大收益. 我们要求的答案就是f[0] ...
最新文章
- 浅析防御僵尸网络基于应用层的DDOS攻击
- 解决ExcelReport导出Excel报Number of rules must not exceed 3错误的问题
- NOIP2016提高组复赛解题报告
- 【自动驾驶】20.自动驾驶中的各种时空坐标系
- 数据中心消防设施常见安装间距汇总
- VTK:通过法线显示颜色用法实战
- linux部署DM数据库的DEM系统
- 云原生数据湖解决方案打破数据孤岛,大数据驱动互娱行业发展
- 从自媒体引流到私域池
- numpy的结构数组和内存布局
- java多线程知识点之wait和sleep的区别
- 昆仑通态MCGS与3台欧姆龙E5*C温控器通讯程序功能:通过昆仑通态触摸屏
- 未能找到主机服务器是什么鬼,未能找到指定主机服务器是什么意思
- 计算机专业实训图片,实训一图片的简单处理_计算机软件及应用_IT计算机_专业资料...
- 用代码关闭冰刃(IceSword)
- 狄利克雷卷积_积性函数和狄利克雷卷积小结
- PMP®项目管理|项目干系人如何管理?
- 扎心!为何HR看了你的简历却不通知面试?
- 1443:【例题4】Addition Chains
- CDN可以防护什么种类的攻击?