একটি নম্বর লিস্ট nums দেওয়া আছে। বাইনারি রিপ্রেজেন্টেশনে ১-এর সংখ্যা (পপকাউন্ট) অনুযায়ী অ্যাসেন্ডিং সর্ট করুন। টাই হলে নম্বরের মান অনুযায়ী সর্ট করুন।
ইনপুট উদাহরণ
nums = [4, 1, 12, 7, 6]
আউটপুট: [1, 4, 6, 12, 7]
বাইনারি রিপ্রেজেন্টেশন
- 4 = 0100 (১টি ১)
- 1 = 0001 (১টি ১)
- 6 = 0110 (২টি ১)
- 12 = 1100 (২টি ১)
- 7 = 0111 (৩টি ১)
পাইথন কোড
def solve(nums):
nums.sort(key=lambda num: (bin(num).count("1"), num))
return nums
# টেস্ট
print(solve([4, 1, 12, 7, 6])) # [1, 4, 6, 12, 7]
ব্যাখ্যা
bin(num).count("1") দিয়ে পপকাউন্ট বের করা হয়। sort(key=...) দিয়ে টাপল (popcount, value) অনুযায়ী সর্ট হয়। সময় জটিলতা O(n log n * log max)।