阿里内推编程测验---靶场射击,类似[LeetCode]Burst Balloons

【编程题训练】统计射击比赛成绩 题目描述 给定一个射击比赛成绩单,包含多个选手若干次射击的成绩分数,请对每个选手按其最高3个分数之和进行降序排名,输出降序排名后的选手ID序列。 条件如下: 一个选手可以有多个射击成绩的分数,且次序不固定。 如果一个选手成绩少于3个,则认为选手的所有成绩无效,排名忽略该选手。 如果选手的成绩之和相等,则成绩之和相等的选手按照其ID降序排列。 输入描述: 输入第一行,一个整数N,表示该场比赛总共进行了N次射击,产生N个成绩分数(2<=N<=100)。 输入第二行,一个长度为N整数序列,表示参 阅读详情


在某射击场有N个靶,每个靶上都有一个分数,存在score数组中,击中第i个靶的得分为core[left]*score[i]*score[right],同时原left和right两个靶变为相邻的靶,其中得分为0的靶是不能射击的,当left不存在或者不能射击时,得分为score[i]*score[right],同理,right也遵循此规则,当left和right都不存在或者都不能射击时,得分为score[i],请计算出击中所有能射击的靶,最多得多少分?

分析:

因为得分0的靶是不能射击的,就好比用“0”隔开,然后一个数组变成多个数组。把每一个段的相加就是最后的结果了,就好比例子[2,3,0,3],把划分开的数组{2,3} {3} 送入leetcode的Burst Balloons题目里面。然后在求和。区间动态规划。

 312. Burst Balloons

题目大意:

给定n个气球,下标为0到n-1。每个气球上都标有一个数字,用数组nums表示。你被要求扎破所有气球。扎破第i个气球可以获得nums[left] * nums[i] * nums[right]枚硬币。这里left和right是与i相邻的下标。扎破气球以后,left和right就变成相邻的了。

寻找最优策略下可以获得的硬币数。

注意:

(1) 你可以假设nums[-1] = nums[n] = 1. 它们并非真实的因此不能扎破。

(2) 0 ≤ n ≤ 500, 0 ≤ nums[i] ≤ 100

解题思路:

动态规划(Dynamic Programming)

时间复杂度O(n ^ 3)

以最后被爆破的气球m为界限,把数组分为左右两个子区域

状态转移方程:

dp[l][r] = max(dp[l][r], nums[l] * nums[m] * nums[r] + dp[l][m] + dp[m][r])

dp[l][r]表示扎破(l, r)范围内所有气球获得的最大硬币数,不含边界;

l与r的跨度k从2开始逐渐增大;

三重循环依次枚举范围跨度k,左边界l,中点m;右边界r = l + k;

public class Solution {
    public int maxCoins(int[] iNums) {
        int[] nums = new int[iNums.length + 2];
        int n = 1;
        for (int x : iNums) if (x > 0) nums[n++] = x;
        nums[0] = nums[n++] = 1;
        int[][] dp = new int[n][n];
        for (int k = 2; k < n; ++k)
            for (int left = 0; left < n - k; ++left) {
                int r = left + k;
                for (int m = left + 1; m < r; ++m)
                    dp[left][r] = Math.max(dp[left][r], nums[left] * nums[m] * nums[r] + dp[left][m] + dp[m][r]);
            }    
        return dp[0][n - 1];
    }
}

参考:

http://bookshadow.com/weblog/2015/11/30/leetcode-burst-balloons/

http://www.cnblogs.com/njufl/p/LeetCode.html

http://blog.youkuaiyun.com/zly9923218/article/details/51059664




别让运放自激振荡!手把手教你用波特图分析反相放大电路的稳定性(附LTspice仿真) 本文详细解析了运算放大器在反相放大电路中的稳定性问题,通过波特图分析和LTspice仿真,揭示了自激振荡的成因及解决方案。文章从故障现象识别到数学工具应用,再到实战仿真和工程优化,提供了一套完整的稳定性分析工具链,帮助工程师有效避免运放自激振荡问题。 阅读详情

相关推荐

手把手教你用STM32CubeMX配置I3C通信(含动态地址分配实战)

本文提供了一份基于STM32CubeMX配置I3C通信的实战指南,重点讲解了动态地址分配的实现步骤。通过详细的工程配置、从设备枚举、CCC命令使用及数据读写示例,帮助开发者快速掌握这一高效通信协议,以替代传统的I2C或SPI接口,满足多传感器连接与低功耗设计需求。

c8d9e0f1的博客 543

贪心算法-射击气球

文章目录什么是贪心算法Leetcode452-射击气球题目描述:解题框架:解题思路:最优情况的整体思路流程图:解题代码:解决问题的Solution类(注意sort函数的使用)main函数测试程序接口 什么是贪心算法 贪心算法不从整体最优上加以考虑,所做出的仅是在某种意义上的局部最优选择。使用贪心策略要注意局部最优与全局最优的关系,选择当前的局部最优并不一定能推导出问题的全局最优。贪心策略解题需要解决以下两个问题: 1、该问题是否适合使用贪心策略求解,也就是该问题是否具有贪心选择性质 。 2、制定贪心策略,以

CppYyds的博客 774

python操作git推送自己分支并合并主分支(持续优化该工具)

python git

qq_44707265的博客 862

LeetCode第452题 用最少数量的箭引爆气球

算法 贪心 核心思想 整体思路就是不断修改射击的时间,在经过以起点为主的排序后,存在两个前提:前一组points0维必小于下一组points0维,以及同一组0维必小于1维。所以判定条件如下: //存在射击窗口期[start,end] //对于数组[x1,y1],[x2,y2],存在如下情况 x2 >= y1 -> 更新start=x2,end=y2; x1 >= x2 >= y1 -> 更新start = x2; x1 > x2 > y2 > y1 -&g.

Ealiser的博客 516

金蝶ERP元数据解析:字段属性与表结构映射实战

本文深入解析金蝶ERP元数据的核心价值与应用实践,详细介绍了字段属性与表结构映射的关键技术。通过缓存获取与工具类直连两种方案对比,结合实际案例展示元数据在数据库校验、动态表单生成等场景的应用,帮助开发者高效解决二次开发中的常见问题。

weixin_33738555的博客 433

AI Agent Harness自动化漏洞扫描

本文要介绍的AI Agent Harness自动化漏洞扫描方案,正是为了解决传统漏扫的上述痛点而生。漏洞检出率提升35%以上,逻辑漏洞检出率从不足30%提升到92%误报率从27%降到3%以下,人工复核成本降低90%支持自定义业务系统、IoT、工控等多场景资产扫描,适配成本降低80%内置反馈学习机制,扫描效果越用越好AI Agent是指具备自主感知、决策、行动能力的大模型驱动程序,它可以根据给定的目标,自主调用工具、规划步骤、完成任务。

AI 原生应用开发的博客 473

leetcode #452 射击气球

题目描述 要是一箭射击更多的气球,最好的情况就是这些气球都有一个公共的坐标区间,所以我们可以先将这些气球按左端点进行排序,然后开始遍历,如果此时气球的左端点在当前区间内,则更新当前区间的左端点为气球的左端点,再比较气球的右端点和区间的右端点,如果区间的右端点比气球的右端点大,则更新区间的右端点为当前气球的右端点,从而缩小区间,找出更多的公共区间。如果一开始气球的左端点不在当前区间内,则射箭的数量+1,同时更新区间为气球的左右端点。 代码 class Solution { public int fi

月月鸟的博客 544

SAP SD模块定价过程后台配置简介

只有手工输入定价时(例如,在定价中的定价浏览屏幕中),或者只有从外部处理转移这些定价时(例如,成本核算),才将这些定价包括在确定(价格确定、输出确定,批次确定)之中。定价过程的定义和分配是SD模块中最核心的配置,包含了条件表、条件类型、存取顺序、发票类型、客户定价过程等,确定了销售订单已什么价格销售、税率、附加折扣等多个条件行程有一个定价过程。12、小计:记录该条件类型在VBAP表中是否存储,以及其后续用途,如记入信贷,占用信贷额度,记入成本等,如果需要金额暂用信贷额度的话,在小计这里选择A即可。

我小时候很黑的博客 3782

靶场项目编写实战

电气鼠靶场系统包含了常见的漏洞案例,有提示和代码案例。初学者可以通过查询资料等方式通过关卡,在试炼的过程学习漏洞原理和代码审计。

qq_27698011的博客 1234

【27】软考软件设计师——数据流图(DFD)补全题满分精讲|下午15分大题深度拆解

本文是《软件设计师·50讲通关|从零基础到工程师职称》专栏第27篇,深度精讲**下午案例题第1道必考大题:数据流图(DFD)补全**,该题单题分值高达**12 ~ 15分**,是整张试卷最稳的保底得分大题。我结合多年备考复盘与真题阅卷规则,超详细拆解DFD四大核心元素标准定义、机考绘图规范、三层分层逻辑、**父图子图平衡刚性扣分规则**,升级强化版「DFD满分补全三步法」;复刻历年高频真题完整流程,拆解缺失数据流定位、实体/存储辨析、平衡改错、文字需求对照全流程,配套**阅卷满分答题话术、机考避坑细则

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 590

C#上位机实战:Modbus RTU串口通信(CRC校验+超时重发完整实现)

在工业自动化上位机开发中,Modbus RTU是串口通信的事实标准协议,SerialPort是 .NET 平台操作串口的原生类,无需依赖第三方库即可实现基础通信。实际项目中,工控现场存在电磁干扰、串口丢包、设备响应延迟等问题,CRC 数据校验用于保证报文完整性,超时重发机制用于提升通信稳定性。本文从零封装一套可直接落地的 Modbus RTU 通信组件,包含完整的校验算法、超时控制、重发逻辑,并配套 WinForm 演示界面。本文基于 C# 原生SerialPort类,实现了一套生产可用。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 387

射击气球(LeetCode452)

在二维空间中有许多球形的气球。对于每个气球,提供的输入是水平方向上,气球直径的开始和结束坐标。由于它是水平的,所以y坐标并不重要,因此只要知道开始和结束的x坐标就足够了。开始坐标总是小于结束坐标。平面内最多存在104个气球。 一支弓箭可以沿着x轴从不同点完全垂直地射出。在坐标x处射出一支箭,若有一个气球的直径的开始和结束坐标为 xstart,xend, 且满足 xstart ≤ x ≤ xend,则该气球会被引爆。可以射出的弓箭的数量没有限制。 弓箭一旦被射出之后,可以无限地前进。我们想找到使得所有气球全

Orange1024 639

巧妙解决网页弹窗重复出现问题

本文探讨了网页弹窗关闭后刷新重现的问题及解决方案。通过分析原生JavaScript实现的弹窗代码存在的缺陷,提出了使用jQuery改进的方法。关键点包括:利用event.preventDefault()阻止默认行为避免刷新,采用jQuery的hide("slow")方法实现优雅的关闭动画,确保关闭状态持久化。改进后的方案既解决了弹窗重复出现的问题,又提升了用户体验,为网页弹窗交互提供了更优的实现方式。文中提供了完整的HTML、CSS和JavaScript代码示例,便于开发者直接应用。

2501_90323865的博客 181

lcs leetcode1143 dp

最长公共子序列 给定两个字符串 text1 和 text2,返回这两个字符串的最长 公共子序列 的长度。如果不存在 公共子序列 ,返回 0 。 一个字符串的 子序列 是指这样一个新的字符串:它是由原字符串在不改变字符的相对顺序的情况下删除某些字符(也可以不删除任何字符)后组成的新字符串。 例如,“ace” 是 “abcde” 的子序列,但 “aec” 不是 “abcde” 的子序列。 两个字符串的 公共子序列 是这两个字符串所共同拥有的子序列。 示例 1: 输入:text1 = “abcde”, tex.

weixin_46186724的博客 534

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

LeetCode-452 射击气球

在二维空间中有许多球形的气球。对于每个气球,提供的输入是水平方向上,气球直径的开始和结束坐标。由于它是水平的,所以y坐标并不重要,因此只要知道开始和结束的x坐标就足够了。开始坐标总是小于结束坐标。平面内最多存在104个气球。 一支弓箭可以沿着x轴从不同点完全垂直地射出。在坐标x处射出一支箭,若有一个气球的直径的开始和结束坐标为 xstart,xend, 且满足 xstart ≤ x ≤ xend...

lucifer_24的博客 729

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

2015--阿里内推--测试开发--技术一面--(通过)

3月9号,阿里电面一面(通过)     通过阿里的师兄内推到支付宝的测试开发岗,师兄叫我写一下个人信息和简历信息,直接发过来一个链接,我就依照以前我找实习的信息就开始填了,填完之后就开始浏览一些阿里的面经什么的,填完刚过半个小时的样子(当时我还在上班),突然阿里总部的电话就打过来了,说他是支付宝,瞬间我就明白了..当时心里还完全没做好准备,当时还在问一个内推一面挂了的同学,一面会安排到什么时候,

翻滚吧!程序猿! 2381

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

leetcode三道类似的字符串动态规划问题

参考了这篇文章,用动态规划方式求解最长公共子串长度 描述 有两个字符串(可能包含空格),请找出其中最长的公共连续子串,输出其长度。(长度在1000以内) 例如: 输入:abcde bcd 输出:3 回到顶部 解析 1、把两个字符串分别以行和列组成一个二维矩阵。 2、比较二维矩阵中每个点对应行列字符中否相等,相等的话值设置为1,否则设置为0。 3、通过查找出值为1的最长对角线就能找到最长公共子串。 暴力求解法 def getLCS(s,t): if len(s) == 0 or len(t) == 0

书生的日常 419

动态规划——Burst Ballons

题意:给定n个气球。每次你可以打破一个,打破第i个,那么你会获得nums[left] * nums[i] * nums[right]个积分。 (nums[-1] = nums[n] = 1)求你可以获得的最大积分数。 Note:You may imagine nums[-1] = nums[n] = 1. They are not real therefore you can not burst...

weixin_34268753的博客 144

leetcode题:15. 三数之和(中等)

一、题目描述:15. 三数之和(中等) 给定一个包含 n 个整数的数组nums,判断nums中是否存在三个元素 a,b,c ,使得a + b + c = 0 ?找出所有满足条件且不重复的三元组。 注意:答案中不可以包含重复的三元组。 例如, 给定数组 nums = [-1, 0, 1, 2, -1, -4], 满足要求的三元组集合为: [ [-1, 0, 1], [-1,...

tankpanv的博客 186

java在某射击场有n个靶_Leetcode 312: Burst Balloons

Given n balloons, indexed from 0 to 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 i you will get nums[le...

weixin_34088048的博客 208

2017阿里编程测试题

题目: 在某射击场有N个靶,每个靶上都有一个分数,存在score数组中。击中第i个靶的得分为score[left] * score[i] * score[right],同时原left和right两个靶变为相邻的靶。其中得分为0的靶是不能射击的,当left不存在或者不能射击时,得分为 score[i] * score[right],同理right也遵循此规则; 当left和right都不存在或者

BoomMan 3994

美团笔试2020.4.02第三题小仓的射击练习4

3.小仓的射击练习4 题目描述: 小仓酷爱射击运动。今天的小仓想挑战自我。小仓有N颗子弹, 接下来小仓每次会自由选择K颗子弹进行连续射击,全中靶心的概率为p[k]。 如果成功小仓将获得a[k]的得分,并且可以使用余下子弹继续射击,否则今天的挑战结束。 小仓想知道在最佳策略下,自己能得到的最高期望分数是多少。 输入要求: 第一行一个数N,代表子弹数量。 第二行N个数p[],第 i 个数代表p[i]。...

tang0o0的博客 852

【LeetCode】每日一题(二十五)312. 戳气球 动态规划 区间dp

312. 戳气球 20200719 难度:困难 题目描述 有 n 个气球,编号为0 到 n-1,每个气球上都标有一个数字,这些数字存在数组 nums 中。 现在要求你戳破所有的气球。如果你戳破气球 i ,就可以获得 nums[left] * nums[i] * nums[right] 个硬币。 这里的 left 和 right 代表和 i 相邻的两个气球的序号。注意当你戳破了气球 i 后,气球 left 和气球 right 就变成了相邻的气球。 求所能获得硬币的最大数量。 说明: 你可以假设 nums[

Evelyn的博客 371

阿里内推编程测试题

题目: 思路: 在网上跟大家交流后,才知道自己漏看了题目,后来想了想,现将思路贴出来,供大家交流 目的:最多可以取出多少个能够组成嵌套集如果存在一个子嵌套集,而新增加的一个二段模式与子嵌套集的某个二段模式冲突(不相互嵌套),它虽然不能加入该嵌套子集, 但是它却可以和该子集中不冲突的其他二段模式组成子集,所以很难处理。因此,从这个角度来思考,太过于复杂。从上面的思路中我们可以得到一些有用的结论:针对存

vonmax007的博客 4640

阿里2017年秋招编程题

题目:分四种情况;当left不存在或者不能射击时,得分为 score[i] * score[right];当右边不存在是score[i]*score[left];第三种左右都存在时! score不是有序的,反正核心是找三个相邻的靶

微小的鱼的博客 430

每日算法系列【LeetCode 312】戳气球

题目描述 有 n 个气球,编号为0 到 n-1,每个气球上都标有一个数字,这些数字存在数组 nums 中。 现在要求你戳破所有的气球。每当你戳破一个气球 i 时,你可以获得 nums[left] * nums[i] * nums[right] 个硬币。 这里的 left 和 right 代表和 i 相邻的两个气球的序号。注意当你戳破了气球 i...

算法码上来 841
上一篇: 最长递增子序列
下一篇: java抽象类和接口
say_haha
博客等级 码龄13年 48粉丝 64原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值