मान लीजिए कि हमारे पास एक बहुत बड़ी पूर्णांक संख्या का प्रतिनिधित्व करने वाली num नामक एक स्ट्रिंग है और एक अन्य मान k भी है। हम मूल्यों के किन्हीं दो आसन्न अंकों को अधिकतम k बार स्वैप कर सकते हैं। हमें वह न्यूनतम मूल्य खोजना होगा जो हम प्राप्त कर सकते हैं।
इसलिए, यदि इनपुट num ="5432" k =4 जैसा है, तो आउटपुट 2453 होगा क्योंकि पहले नंबर पर 5432 है। फिर पहले चरण के बाद यह 4532, फिर 4523, फिर 4253 और अंतिम चरण 2453 पर होगा।
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे
-
min_num :=अंकों के अंकों को क्रमबद्ध करें
-
मैं :=0, to_find :=0
-
जबकि संख्या min_num और k> 0 के समान नहीं है और i <संख्या का आकार, करें
-
indx :=आइटम की अनुक्रमणिका to_find अनुक्रमणिका i से संख्या में
-
जबकि इंडेक्स -1 के समान नहीं है, करें
-
अगर इंडेक्स - मैं <=के, तो
-
संख्या:=संख्या [सूचकांक 0 से i-1 तक] संयुग्मित संख्या [सूचकांक] संघटक [अनुक्रमणिका i से indx-1] संयुग्मित संख्या [सूचकांक indx+1 से अंत तक]
-
k :=k -(इंडेक्स - i)
-
मैं :=मैं + 1
-
to_find :=0
-
indx :=आइटम की अनुक्रमणिका to_find अनुक्रमणिका i से संख्या में
-
-
अन्यथा,
-
लूप से बाहर आएं
-
-
-
to_find :=to_find + 1
-
-
वापसी संख्या
उदाहरण
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें
def solve(num, k): min_num = sorted(list(num)) min_num = ''.join(min_num) i = 0 to_find = 0 while num != min_num and k > 0 and i < len(num): indx = num.find(str(to_find), i) while indx != -1: if indx - i <= k: num = num[:i] + num[indx] + num[i:indx] + num[indx+1:] k -= (indx - i) i += 1 to_find = 0 indx = num.find(str(to_find), i) else: break to_find += 1 return num num = "5432" k = 4 print(solve(num, k))
इनपुट
"5432", 4
आउटपुट
2453