面试题精选(74):n个数连接得到最小或最大的多位整数(百度笔试题)

这篇博客介绍了如何解决一道百度笔试题,即给定n个正整数,通过某种排序规则连接成最小或最大的多位整数。博主通过分析指出,关键在于自定义字符串比较规则,确保A+B>B+A时A>B。文章提供了一种解决方案,将数字转为字符串,使用自定义比较操作符进行排序,然后输出排序后的字符串。博主还强调了字符串处理在解决问题中的重要性,并提供了测试代码来验证算法的正确性。

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

题目描述:
设有n个正整数,将它们联接成一排,组成一个最小的多位整数。
程序输入:n个数
程序输出:联接成的多位数

 


例如:
n=2时,2个整数32,321连接成的最小整数为:32132,
n=4时,4个整数55,31,312, 33 联接成的最小整数为:312313355

[题目要求]
1. 给出伪代码即可,请给出对应的文字说明,并使用上面给出的例子试验你的算法。
2. 给出算法的时间空间复杂度。
3. 证明你的算法。(非常重要)

 

 

分析:(问题归结为排序,但大小比较非一般的比较)

 

举例说明正常的字符串比较缺陷!如:A=’321’,B=’32’,按照标准的字符串比较规则因为A>B,所以A+B > B+A ,而实际上’32132’ < ’32321’。
所以,自定义一种字符串的比较规则:即如果A+B>B+A,则我们认为A>B。且可以证明:如果A+B>=B+A,B+C>=C+B,则一定有:A+C>=C+A。
    这样一来,程序就很简单了。分3步,先把n个数字转换成字符串存储;再按照自定义的规则把n个字符串排序;最后按照从小到大的顺序输出这些字符串(如果从大到小则是求最大的多位整数)。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值