华为OD机试用Python实现 -【删除重复数字后的最大数字】(2023-Q1 新题)

本篇博客介绍如何使用Python解决华为OD机试中的一道题目——删除重复数字后的最大数字。通过计数排序和单调栈,找出最大值。文章提供代码逻辑解释及示例,并提醒考生理解解题思路而非机械记忆。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在这里插入图片描述

本篇题解:删除重复数字后的最大数字

题目

一个长整型数字,消除重复的数字后,得到最大的一个数字。

如 12341 ,消除重复的 1,可得到 1234 或 2341,取最大值 2341。

42234,消除 4 得到 4223 或者 2234 ,再消除 2,得到 423 或 234,取最大值 423。

输入

输入一个数字,范围 [1,100000]

输出

输出经过删除操作后的最大值

示例一

输入

12341

输出

2341

示例二

输入

42234

输出

423

代码编写逻辑

下述代码的主要思路是将输入的数字字符串转化为数字列表,然后使用单调栈来找到最大的数。具体来说,首先使用计数排序统计每个数字出现的次数,然后遍历数字列表,对于每个数字,如果它比栈顶元素大,就将栈顶元素弹出,直到栈为空或者栈顶元素比当前数字大或者栈顶元素在后面不再出现。在这个过程中,需要使用一个 vis 数组来记录每个数字是否在栈中出现过,避免重复入栈。最后一步,将栈中的数字按照从高到低的顺序组合成一个新的数字,即为最大的数。

Python 代码展示

n = input(
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

梦想橡皮擦

如有帮助,来瓶可乐

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

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

打赏作者

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

抵扣说明:

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

余额充值