สมมติว่าเรามีรายการตัวเลขเป็นตัวเลข เราต้องเรียงลำดับรายการจากน้อยไปมากตามจำนวน 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]