मान लीजिए कि हमारे पास केवल दो मानों 1 और -1 के साथ एक सूची है। हमें सबसे लंबे सबलिस्ट की लंबाई ज्ञात करनी है जिसका योग 0 है।
इसलिए, यदि इनपुट nums =[1, 1, −1, 1, 1, −1, 1, −1, 1, −1] जैसा है, तो आउटपुट 8 होगा, क्योंकि सबसे लंबी सबलिस्ट [−1 है] , 1, 1, −1, 1, −1, 1, −1] जिसका योग 0 है।
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
-
तालिका:=एक नया खाली नक्शा
-
cs :=0, max_diff :=0
-
मेरे लिए 0 से लेकर अंकों के आकार -1 तक के लिए, करें
-
सीएस:=सीएस + अंक[i]
-
अगर सीएस 0 के समान है, तो
-
max_diff :=अधिकतम i + 1 और max_diff
-
-
यदि cs तालिका में है, तो
-
max_diff :=अधिकतम max_diff और (i - तालिका[cs])
-
-
अन्यथा,
-
टेबल [सीएस] :=मैं
-
-
-
वापसी max_diff
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -
उदाहरण
class Solution: def solve(self, nums): table = {} cs = 0 max_diff = 0 for i in range(len(nums)): cs += nums[i] if cs == 0: max_diff = max(i + 1, max_diff) if cs in table: max_diff = max(max_diff, i − table[cs]) else: table[cs] = i return max_diff ob = Solution() nums = [1, 1, −1, 1, 1, −1, 1, −1, 1, −1] print(ob.solve(nums))
इनपुट
[1, 1, −1, 1, 1, −1, 1, −1, 1, −1]
आउटपुट
8