根据数字二进制下1的数目排序(python)

1356.根据数字二进制下1的数目排序

给你一个整数数组arr 。请你将数组中的元素按照其二进制表示中数字1的数目升序排序。

如果存在多个数字二进制中1的数目相同,则必须将它们按照数值大小升序排列。请你返回排序后的数组。

示例1:

输入:arr = [0, 1, 2, 3, 4, 5, 6, 7, 8]

输出:[0, 1, 2, 4, 8, 3, 5, 6, 7]

解释:[0]是唯一一个有0个1的数。

[1, 2, 4, 8]都有1个1 。

[3, 5, 6]有2个1 。[7]有3个1 。

按照1的个数排序得到的结果数组为[0, 1, 2, 4, 8, 3, 5, 6, 7]

示例2:

输入:arr = [1024, 512, 256, 128, 64, 32, 16, 8, 4, 2, 1]

输出:[1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024]

解释:数组中所有整数二进制下都只有1个1 ,所以你需要按照数值大小将它们排序。

示例3:

输入:arr = [10000, 10000]

输出:[10000, 10000]

示例4:

输入:arr = [2, 3, 5, 7, 11, 13, 17, 19]

输出:[2, 3, 5, 17, 7, 11, 13, 19]

示例5:

输入:arr = [10, 100, 1000, 10000]

输出:[10, 100, 10000, 1000]

def func(arr):
    arr = sorted(arr)
    def sort_key(x):
        return bin(x).count('1')
    arr1 = sorted(arr, key=sort_key, reverse=False)
    return arr1

print(func(arr = [1024, 512, 256, 128, 64, 32, 16, 8, 4, 2, 1]))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值