You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何按置位(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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 06:08:33