मान लीजिए हमारे पास nums नामक एक सरणी है (केवल धनात्मक मानों के साथ) और हम अद्वितीय तत्वों वाला एक उपसरणी मिटाना चाहते हैं। हमें स्कोर मिलेगा जो उपसरणी तत्वों का योग है। हमें ठीक एक उपसरणी मिटाकर प्राप्त होने वाला अधिकतम स्कोर ज्ञात करना है।
इसलिए, यदि इनपुट है nums = [6,3,2,3,6,3,2,3,6], तो आउटपुट 11 होगा, क्योंकि यहां इष्टतम उपसरणी या तो [6,3,2] या [2,3,6] है, इसलिए योग 11 है।
इसे हल करने के लिए, हम निम्न चरणों का पालन करेंगे:
- seen := एक नया मैप
- ans := sum := 0
- l := 0
- nums में प्रत्येक सूचकांक r और मान x के लिए, करें
- यदि x seen में मौजूद है, तो
- index := seen[x]
- जब तक l <= index, करें
- seen[nums[l]] हटाएं
- sum := sum - nums[l]
- l := l + 1
- seen[x] := r
- sum := sum + x
- ans := ans और sum का अधिकतम
- यदि x seen में मौजूद है, तो
- ans वापस करें
उदाहरण
बेहतर समझ के लिए निम्न कार्यान्वयन देखें:
def solve(nums):
seen = dict()
ans = sum = 0
l = 0
for r, x in enumerate(nums):
if x in seen:
index = seen[x]
while l <= index:
del seen[nums[l]]
sum -= nums[l]
l += 1
seen[x] = r
sum += x
ans = max(ans, sum)
return ans
nums = [6,3,2,3,6,3,2,3,6]
print(solve(nums))
इनपुट
[6,3,2,3,6,3,2,3,6]
आउटपुट
11