在线机考|2024华为实习&秋招&春招编程题(最新)——第1题_最强大脑游戏_100分(九)

题目内容

某最强大脑游戏要求:选手在一个整数序列中(整数取值为[1, 10]),自行去掉K个整数,得到一个新的整数序列,-使得整数序列左到右拼接起来后,得到的整数值最大。那么假设你是优秀的选手,在给定这个整数序列之后,你能够得到的最大整数值是多少?

输入描述

输入分为三行:

第一行为一个整数N,表示整数序列有N个元素,其取值范围[1,100000]

第二行为N个整数,空格分割,其整数取值范围[1,10]

第三行为一个整数K,表示去掉K个整数,其整数范围[1,N)

输出描述

输出一个最大的整数值

样例

输入:

4
3 6 9 4
2
输出:

94

解题思路

为了得到保留整数拼接后的最大值,我们需要确保高位的数字尽可能大。为此,可以采用以下策略:

  1. 优先保留值为10的元素:由于10在拼接时相对于1-9的数字更具优势,优先保留它们可以增加最终拼接数的值。
  2. 使用贪心算法结合栈:遍历整数序列,使用一个栈来存储保留的整数;当当前数字比栈顶数字更大,并且还可以移除数字时,移除栈顶数字以便当前更大的数字能够占据更高的位数;特别处理值为10的元素,确保它们被优先保留。
  3. 处理剩余的移除次数:在遍历完所有数字后,如果仍有剩余的移除次数,则从栈顶移除相应数量的数字。
  4. 拼接结果:将栈中的数字按照顺序拼接成最终的最大整数。

代码实现

Python

def main():
    # 读取输入
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

博士僧小星

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值