मान लीजिए कि हमारे पास अंक नामक एक सरणी है, हमें एक उप-सरणी की अधिकतम लंबाई का पता लगाना है, जहां इसके सभी तत्वों का गुणनफल सकारात्मक है। हमें सकारात्मक उत्पाद के साथ एक उप-सरणी की अधिकतम लंबाई ज्ञात करनी है।
इसलिए, यदि इनपुट nums =[2,-2,-4,5,-3] जैसा है, तो आउटपुट 4 होगा क्योंकि पहले चार तत्व एक सबएरे बना रहे हैं जिसका उत्पाद सकारात्मक है।
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे:
- उपयोग() फ़ंक्शन को परिभाषित करें। इसमें s, e . लगेगा
- नकारात्मक:=0
- ns :=-1, ne :=-1
- के लिए मैं श्रेणी एस से ई में, करो
- यदि अंक [i] <0, तो
- नकारात्मक:=नकारात्मक + 1
- यदि ns, -1 के समान है, तो
- ns :=मैं
- ने:=मैं
- यदि अंक [i] <0, तो
- यदि ऋणात्मक सम है, तो
- ई-एस+1 लौटाएं
- अन्यथा,
- अधिकतम e-ns और ne-s लौटाएं
- मुख्य विधि से, निम्न कार्य करें -
- उत्तर:=0
- s :=-1, e :=-1
- मैं के लिए 0 से लेकर अंकों के आकार तक, करें
- यदि nums[i] 0 के समान नहीं है और s -1 के समान है, तो
- s :=i
- अन्यथा जब nums[i] 0 के समान है और s -1 के समान नहीं है, तो
- e :=i-1
- उत्तर:=अधिकतम उत्तर और उपयोग (ओं, ई)
- s :=-1, e :=-1
- यदि nums[i] 0 के समान नहीं है और s -1 के समान है, तो
- यदि s -1 के समान नहीं है और e, -1 के समान है, तो
- e :=अंकों का आकार -1
- उत्तर:=अधिकतम उत्तर और उपयोग (ओं, ई)
- वापसी उत्तर
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें:
उदाहरण
def util(s, e): neg = 0 ns, ne = -1, -1 for i in range(s, e+1): if nums[i]<0: neg += 1 if ns == -1: ns = i ne = i if neg == 0 or neg %2 == 0: return e-s+1 else: return max(e-ns, ne-s) def solve(nums): ans = 0 s, e = -1, -1 for i in range(len(nums)): if nums[i]!=0 and s == -1: s = i elif nums[i]==0 and s != -1: e = i-1 ans = max(ans, util(s, e)) s = -1 e = -1 if s!= -1 and e == -1: e = len(nums)-1 ans = max(ans, util(s, e)) return ans nums = [2,-2,-4,5,-3] print(solve(nums))
इनपुट
[2,-2,-4,5,-3]
आउटपुट
4