मान लीजिए कि हमारे पास एक बहुत बड़ी पूर्णांक संख्या का प्रतिनिधित्व करने वाली 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