मान लीजिए कि हमारे पास संख्याओं की एक सूची है जिसे अंक और दो मान x और y कहते हैं, हमें दो गैर-अतिव्यापी उप-सूचियों का अधिकतम योग संख्याओं में खोजना होगा जिनकी लंबाई x और y है।
इसलिए, यदि इनपुट अंकों की तरह है =[3, 2, 10, -2, 7, 6] x =3 y =1, तो आउटपुट 22 होगा, लंबाई 3 के साथ सबलिस्ट के रूप में हम [3, 2, 10] और दूसरे के लिए हम [7] का चयन करते हैं।
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
- P :=एकल तत्व 0 के साथ एक सूची
- ए में प्रत्येक एक्स के लिए, करें
- P के अंत में
- सम्मिलित करें (P + x का अंतिम तत्व)
- फ़ंक्शन को हल करें() परिभाषित करें। इसमें len1, len2 लगेगा
- Q:=तत्व के साथ एक सूची (P[i + len1] - P[i]) प्रत्येक i के लिए 0 से लेकर P - len1 के आकार तक
- उपसर्ग :=Q की एक प्रति
- मैं के लिए 0 से उपसर्ग के आकार के लिए - 1, do
- उपसर्ग[i + 1] :=अधिकतम उपसर्ग[i + 1] और उपसर्ग[i]
- उत्तर:=-अनंत
- i के लिए len1 से लेकर P - len2 के आकार तक के लिए
- बाएं:=उपसर्ग[i - len1]
- दाएं:=P[i + len2] - P[i]
- उत्तर:=अधिकतम उत्तर और (बाएं + दाएं)
- वापसी उत्तर
- मुख्य विधि से निम्न कार्य करें -
- अधिकतम हल करें(len1, len2) , हल करें(len2, len1)
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -
उदाहरण
class Solution:
def solve(self, A, len1, len2):
P = [0]
for x in A:
P.append(P[-1] + x)
def solve(len1, len2):
Q = [P[i + len1] - P[i] for i in range(len(P) - len1)]
prefix = Q[:]
for i in range(len(prefix) - 1):
prefix[i + 1] = max(prefix[i + 1], prefix[i])
ans = float("-inf")
for i in range(len1, len(P) - len2):
left = prefix[i - len1]
right = P[i + len2] - P[i]
ans = max(ans, left + right)
return ans
return max(solve(len1, len2), solve(len2, len1))
ob = Solution()
nums = [3, 2, 10, -2, 7, 6]
x = 3
y = 1
print(ob.solve(nums, x, y)) इनपुट
[3, 2, 10, -2, 7, 6], 3, 1
आउटपुट
22