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

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


สมมติว่าเรามีรายการตัวเลขเป็นตัวเลข เราต้องเรียงลำดับรายการจากน้อยไปมากตามจำนวน 1s ที่มีอยู่ในการแสดงเลขฐานสองสำหรับแต่ละตัวเลข หากตัวเลขสองตัวมีจำนวน 1 เท่ากัน ให้จัดเรียงตามค่าของตัวเลข

ดังนั้น หากอินพุตมีค่าเท่ากับ nums =[4, 1, 12, 7, 6] ผลลัพธ์จะเป็น [1, 4, 6, 12, 7] เพราะ −

  • รูปแบบไบนารีของ 4 คือ 0100
  • รูปแบบไบนารีของ 1 คือ 0001
  • รูปแบบไบนารีของ 6 คือ 0110
  • รูปแบบไบนารีของ 12 คือ 1100
  • รูปแบบไบนารีของ 7 คือ 0111

ดังนั้นการจัดเรียงคือ [1, 4, 6, 12, 7], 1 มาก่อนเพราะค่าน้อยกว่า และ 6 มาก่อนด้วยเหตุผลเดียวกันนี้

เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -

  • กำหนดฟังก์ชันเปรียบเทียบ ใช้ตัวเลข n
  • ส่งกลับคู่ p ที่มี (นับ 1 ในรูปแบบไบนารีของ n ค่าของ n)
  • จัดเรียง 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]