【最大数】&【最小数】

剑指offer45
输入一个非负整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。
示例1
输入: [10,2]
输出: “102”

这个题本质上还是一个排序问题,要解决的是如何定义元素的大小。比如示例1中,如何定义10和2的大小,从而使得排序好的数组的排序结果最小。
首先将整数数组转换为字符串数组。
令a = ‘10’,b = ‘2’
a+b = ‘102’
b+a = ‘210’
显然210 > 102,也就是a需要放在b的前面,使得拼接结果最小。

据此,我们就可以定义一个比较函数,对于输入的a,b,如果a+b > b+a,说明a“大于”b;否则a“小于”b。可以使用快速排序、堆排序等对齐进行排序。将排好序的数组拼接即可得到结果。

本文主要介绍python内置函数sorted,结合lamda进行排序

  • 定义key = lambda x,y : 1 if x < y else -1 从小到大排序 x表示后面数字,如果后面数字大,则lambda=-1,需要进行交换
  • 使用sorted(a,functools.cmp_to_key(key)),使用自定义比较方式对数组进行排序
import functools
def solve():
	nums = map(str,nums)
	cmp_max = lambda x,y:1 if x+y < y+x else -1  #x表示后面的数,y为前面的数
	#cmp_min = lambda x,y: if -1 x+y < y+x else 1  #最小数
	a = sorted(nums,key = functools.cmp_to_key(cmp_max))
	return ''.join(a)
if __name__ == "__main__":
	#从测试角度需要考虑:设计测试用例
	a = [] #输入为空
	a = [0,0] #输入全为0 边界条件
	a = [1,41,3]  #正常输入
	a = [-1,2,3] #输入负数

此外,sorted还可以结合函数使用

def fun(a):
	return len(a)
a = ['aa','bad','a']
sorted(a,key=fun) #按照数组每个元素的长度进行从小到大排序
sorted(a,key=fun,reverse=True) #照数组每个元素的长度进行从大到小排序
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

秃头嘤嘤魔

感谢厚爱

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

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

打赏作者

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

抵扣说明:

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

余额充值