如何按置位(set bits)数量对数组排序?新手实现后遇瓶颈
按置位数量排序数组解决方案
你已经完成了最关键的置位统计逻辑,接下来只需要把这个逻辑封装成函数,再利用Python的排序工具即可实现需求,步骤如下:
1. 封装置位统计逻辑为函数
把你写的统计代码改成可复用的函数,这样排序时能方便调用:
def count_set_bits(num): count1 = 0 a = num while a > 0: s = a % 2 if s == 1: count1 += 1 a = a // 2 # 用整数除法//比int(a/2)更规范 return count1
2. 使用sorted函数按置位数量排序
Python的sorted()函数支持通过key参数指定排序的依据,这里我们把每个元素的置位数量作为排序键:
# 示例1测试 arr = [0,1,2,3,4,5,6,7,8] sorted_arr = sorted(arr, key=count_set_bits) print(sorted_arr) # 输出: [0,1,2,4,8,3,5,6,7] # 示例2测试 arr = [1024,512,256,128,64,32,16,8,4,2,1] sorted_arr = sorted(arr, key=count_set_bits) print(sorted_arr) # 输出: [1,2,4,8,16,32,64,128,256,512,1024]
3. 简化版统计逻辑(可选)
Python内置的bin()函数可以直接把数字转成二进制字符串,用count('1')就能快速统计置位数量,代码更简洁:
def count_set_bits(num): return bin(num).count('1')
这个函数和你写的逻辑效果完全一致,适合简化代码。
关键说明
sorted()是稳定排序:当两个元素的置位数量相同时,会保持它们在原数组中的相对顺序,这正好符合示例中的要求(比如示例1里2和4都只有1个置位,排序后依然保持原顺序)。- 你原来的统计逻辑是正确的,只需要把它封装成函数,就能和排序工具结合使用。
内容的提问来源于stack exchange,提问作者codepractice
相关产品推荐
相关产品推荐

