Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

โปรแกรมจัดเรียงตัวเลขตามจำนวนบิต 1 ในการแทนค่าบाइनนารีใน Python

สมมติว่าเรามีรายการตัวเลข 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 เหมือนกัน

ขั้นตอนการแก้ปัญหา

  1. กำหนดฟังก์ชัน compare รับตัวเลข n
  2. คืนค่าคู่ (จำนวน 1 ในไบนารีของ n, ค่าของ n)
  3. เรียง nums โดยส่งแต่ละค่าเข้าฟังก์ชัน compare ก่อนเปรียบเทียบ
  4. คืนค่า 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]