मान लीजिए कि हमारे पास एआर नामक एक सरणी है, हमें एआर के एक सबरेरे को हटाना होगा जैसे कि एआर में शेष तत्व गैर-घटते क्रम में हैं। हमें निकालने के लिए सबसे छोटी उपसरणी की लंबाई ज्ञात करनी होगी।
इसलिए, यदि इनपुट arr =[10,20,30,100,40,20,30,50] की तरह है, तो आउटपुट 3 होगा क्योंकि हम [100, 40, 20] को हटा सकते हैं जो लंबाई 3 की सबसे छोटी उप-सरणी है, और इन सभी को हटाकर गैर-घटते क्रम में हैं [10,20,30,30,50]।
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे:
- n :=गिरफ्तारी का आकार
- arr :=arr के बाईं ओर 0 और arr के दाईं ओर अनंत डालें
- A,B :=दो नई खाली सूचियां
- p :=1, q:=arr -2 का आकार
- एम:=0
- जबकि p <=q, करें
- अगर गिरफ्तारी [p-1] <=गिरफ्तारी [p], तो
- A के अंत में arr[p] डालें
- p :=p + 1
- अन्यथा जब एआर [क्यू] <=एआर [क्यू + 1], फिर
- B के अंत में arr[q] डालें
- जबकि A खाली नहीं है और A का अंतिम तत्व> B का अंतिम तत्व है
- A से अंतिम तत्व हटाएं
- q :=q - 1
- अन्यथा,
- लूप से बाहर आएं
- M :=अधिकतम M और A का आकार + B का आकार
- अगर गिरफ्तारी [p-1] <=गिरफ्तारी [p], तो
- वापसी एन - एम
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें:
उदाहरण
def solve(arr):
n = len(arr)
arr = [0] + arr + [float("inf")]
A,B=[],[]
p,q=1,len(arr)-2
M = 0
while p <= q:
if arr[p-1] <= arr[p]:
A.append(arr[p])
p += 1
elif arr[q] <= arr[q+1]:
B.append(arr[q])
while A and A[-1] > B[-1]:
A.pop()
q -= 1
else:
break
M = max(M, len(A)+len(B))
return n - M
arr = [10,20,30,100,40,20,30,50]
print(solve(arr)) इनपुट
[10,20,30,100,40,20,30,50]
आउटपुट
3