मान लीजिए कि हमारे पास एक सरणी संख्या है, एक रैंप एक टपल (i, j) है जिसके लिए i
इसलिए, यदि इनपुट nums =[6,0,8,2,1,5] की तरह है, तो आउटपुट 4 होगा क्योंकि अधिकतम चौड़ाई रैंप (i, j) =(1, 5) और nums पर हासिल की जाती है। [1] =0 और अंक [5] =5.
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
बी:=एक नया नक्शा
मेरे लिए 0 से लेकर अंकों के आकार तक, करें
एक्स:=अंक [i]
यदि x, B में है, तो
B[x]
अन्यथा,
बी [एक्स]:=[i]
मिनी:=एक सूची शुरू में इसमें एक इंफ स्टोर करती है
मैक्सी :=एक सूची शुरू में एक -इन को इसमें संग्रहित करती है
प्रत्येक एक्स के लिए बी की सभी चाबियों की सूची सूची को क्रमबद्ध करें, करें
मिनी के अंतिम तत्व का न्यूनतम और मिनी के अंत में न्यूनतम B[x] डालें
प्रत्येक एक्स के लिए बी की सभी चाबियों की उलटी क्रमबद्ध सूची में, करें
मिनी के अंतिम तत्व का न्यूनतम और मिनी के अंत में न्यूनतम B[x] डालें
मैक्सी:=रिवर्स मैक्सी फिर सबरे को शुरू से दूसरे अंतिम तत्व तक ले जाएं
मिनी :=मिनी का सबरे [इंडेक्स 1 से अंत तक]
पी:=0
रेस :=-इन्फ
जबकि p <मिनी का आकार, करें
रेस :=अधिकतम रेस और (मैक्सी[पी] - मिनी[पी])
पी:=पी + 1
रिटर्न रेस
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -
उदाहरण
def solve(nums):
B = {}
for i in range(len(nums)):
x = nums[i]
if x in B:
B[x].append(i)
else:
B[x] = [i]
mini = [float('inf')]
maxi = [float('-inf')]
for x in sorted(B.keys()):
mini.append(min(mini[-1], min(B[x])))
for x in sorted(B.keys(), reverse = True):
maxi.append(max(maxi[-1], max(B[x])))
maxi = maxi[::-1][:-1]
mini = mini[1:]
p = 0
res = float('-inf')
while p < len(mini):
res = max(res, maxi[p] - mini[p])
p += 1
return res
nums = [6,0,8,2,1,5]
print(solve(nums))
इनपुट
[6,0,8,2,1,5]
आउटपुट
4