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