मान लीजिए कि हमारे पास एक सरणी संख्या है, हमें सरणी को कुछ विभाजनों में विभाजित करना होगा, और उनमें से प्रत्येक को व्यक्तिगत रूप से क्रमबद्ध करना होगा। अब उन्हें संयोजित करने के बाद हमें एक क्रमबद्ध सरणी मिलेगी। हमें अधिकतम संख्या में विभाजन ज्ञात करने होंगे जो हम कर सकते थे?
इसलिए, यदि इनपुट [3,2,4,5,5] जैसा है, तो आउटपुट 4 होगा, क्योंकि हम [3,2], [4], [5], [5] जैसे विभाजन कर सकते हैं।
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
-
वास्तविक:=सूची संख्याओं को क्रमबद्ध करें
-
p1 :=0,p2 :=1, c :=0
-
निम्नलिखित को असीम रूप से करें, करें
-
झंडा:=सच
-
tmp:=अंकों की सबलिस्ट को सॉर्ट करें [इंडेक्स p1 से p2-1 तक]
-
j के लिए 0 से tmp के आकार की सीमा में, करें
-
अगर tmp[j] वास्तविक [p1+j] के समान नहीं है, तो
-
झंडा:=झूठा
-
p2 :=p2 + 1
-
लूप से बाहर आएं
-
-
अगर झंडा सही है, तो
-
p1 :=p2
-
p2:=p2+1
-
सी:=सी + 1
-
-
यदि p1 अंकों के आकार या p2> अंकों के आकार के समान है, तो
-
वापसी ग
-
-
-
उदाहरण
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें
def solve(nums): real=sorted(nums) p1,p2,c=0,1,0 while True: flag=True tmp=sorted(nums[p1:p2]) for j in range(len(tmp)): if tmp[j]!=real[p1+j]: flag=False p2+=1 break if flag: p1,p2=p2,p2+1 c+=1 if p1==len(nums) or p2>len(nums): return c nums = [3,2,4,5,5] print(solve(nums))
इनपुट
{3,2,4,5,5}
आउटपुट
4