मान लीजिए हमारे पास nums नामक एक सरणी है। हमें सरणी को कुछ विभाजनों में विभाजित करना है, और प्रत्येक को व्यक्तिगत रूप से क्रमबद्ध करना है। अब उन्हें जोड़ने के बाद हमें एक क्रमबद्ध सरणी मिलेगी। हमें अधिकतम विभाजनों की संख्या ज्ञात करनी है जो हम बना सकते हैं?
उदाहरण के लिए, यदि इनपुट [3,2,4,5,5] है, तो आउटपुट 4 होगा, क्योंकि हम [3,2], [4], [5], [5] जैसे विभाजन बना सकते हैं।
इसे हल करने के लिए हम निम्न चरणों का पालन करेंगे:
real := nums सूची को क्रमबद्ध करें।
p1 := 0, p2 := 1, c := 0
निम्न को अनंत रूप से दोहराएं:
flag := True
tmp := nums[p1 से p2-1 तक उपसूची को क्रमबद्ध करें।
j को 0 से tmp के आकार तक लूप करें:
यदि tmp[j], real[p1+j] के समान नहीं है, तो flag := False, p2 := p2 + 1, लूप से बाहर निकलें।
यदि flag सत्य है, तो p1 := p2, p2 := p2+1, c := c + 1
यदि p1, nums के आकार के बराबर है या p2 > nums का आकार, तो c लौटाएं।
उदाहरण
बेहतर समझ के लिए निम्न कार्यान्वयन देखें:
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