สมมติว่าเรามีรายการตัวเลข nums เราต้องจัดเรียงรายการจากน้อยไปมากตามจำนวนบิต 1 ในการแทนค่าบाइनนารีของแต่ละตัวเลข หากตัวเลขสองตัวมีจำนวนบิต 1 เท่ากัน ให้จัดเรียงตามค่าตัวเลข
เช่น ถ้าอินพุตคือ nums = [4, 1, 12, 7, 6] ผลลัพธ์จะเป็น [1, 4, 6, 12, 7] เพราะ:
- ไบนารีของ 4 คือ
0100(1 บิต) - ไบนารีของ 1 คือ
0001(1 บิต) - ไบนารีของ 6 คือ
0110(2 บิต) - ไบนารีของ 12 คือ
1100(2 บิต) - ไบนารีของ 7 คือ
0111(3 บิต)
จัดเรียงได้ [1, 4, 6, 12, 7] โดย 1 อยู่หน้า 4 เพราะค่าน้อยกว่า และ 6 อยู่หน้า 12 เหมือนกัน
ขั้นตอนการแก้ปัญหา
- กำหนดฟังก์ชัน
compareรับตัวเลขn - คืนค่าคู่
(จำนวน 1 ในไบนารีของ n, ค่าของ n) - เรียง
numsโดยส่งแต่ละค่าเข้าฟังก์ชันcompareก่อนเปรียบเทียบ - คืนค่า
nums
ตัวอย่างการใช้งาน
def solve(nums):
nums.sort(key=lambda num: (bin(num).count("1"), num))
return nums
nums = [4, 1, 12, 7, 6]
print(solve(nums))
อินพุต
[4, 1, 12, 7, 6]
เอาต์พุต
[1, 4, 6, 12, 7]