मान लीजिए कि हमारे पास संख्याओं की एक सूची है। हमें प्रत्येक संख्या के लिए द्विआधारी प्रतिनिधित्व में मौजूद 1s की संख्या से सूची को आरोही क्रम में क्रमबद्ध करना होगा। यदि दो संख्याओं में समान संख्या 1s है, तो उन्हें उनके मानों के आधार पर व्यवस्थित करें।
इसलिए, यदि इनपुट 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 देता है (n के बाइनरी रूप में 1 गिनती, n का मान)
- तुलना से पहले प्रत्येक मान को तुलना फ़ंक्शन में पास करके क्रमित करें
- वापसी अंक।
उदाहरण
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -
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]