Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> Python

एक बाइनरी सरणी में 1s का सबसे लंबा निरंतर अनुक्रम प्राप्त करने के लिए 0 के इंडेक्स को 1 से बदलने के लिए खोजें - पायथन में सेट -2


मान लीजिए कि हमारे पास एक बाइनरी ऐरे है। हमें 0 की स्थिति का पता लगाना है जिसे 1 से बदला जा सकता है ताकि 1s के निरंतर अनुक्रम की अधिकतम संख्या प्राप्त हो सके।

इसलिए, यदि इनपुट [1, 1, 0, 0, 1, 0, 1, 1, 1, 0, 1, 1] जैसा है, तो आउटपुट 10 होगा, इसलिए सरणी [1, 1, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1]।

इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -

  • मैं :=0,

  • n :=A का आकार

  • count_left:=0, count_right:=0

  • max_i :=-1, last_i :=-1

  • गिनती_मैक्स:=0

  • जबकि मैं

    • अगर A[i] 1 के समान है, तो

      • count_right :=count_right + 1

    • अन्यथा,

      • अगर last_i -1 के समान नहीं है, तो

        • अगर काउंट_राइट + काउंट_लेफ्ट + 1> काउंट_मैक्स, तो

          • count_max :=count_left + count_right + 1

          • max_i :=last_i

      • last_i :=मैं

      • काउंट_लेफ्ट:=काउंट_राइट

      • count_right:=0

    • मैं :=मैं + 1

  • अगर last_i -1 के समान नहीं है, तो

    • अगर काउंट_लेफ्ट + काउंट_राइट + 1> काउंट_मैक्स, तो

      • count_max :=count_left + count_right + 1

      • max_i :=last_i

  • वापसी max_i

उदाहरण

आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -

def find_max_one_index(A):
   i = 0
   n = len(A)
   count_left = 0
   count_right = 0
   max_i = -1
   last_i = -1
   count_max = 0
   while i < n:
      if A[i] == 1:
         count_right += 1
      else:
         if last_i != -1:
            if count_right + count_left + 1 > count_max:
               count_max = count_left + count_right + 1
               max_i = last_i
            last_i = i
            count_left = count_right
            count_right = 0
      i += 1
   if last_i != -1:
      if count_left + count_right + 1 > count_max:
         count_max = count_left + count_right + 1
         max_i = last_i
   return max_i
A = [1, 1, 0, 0, 1, 0, 1, 1, 1, 1, 0, 1, 1]
print(find_max_one_index(A))

इनपुट

[1, 1, 0, 0, 1, 0, 1, 1, 1, 1, 0, 1, 1]

आउटपुट

10

  1. पायथन में दिए गए बिटोनिक अनुक्रम में बिटोनिक बिंदु खोजें

    मान लीजिए हमारे पास एक बिटोनिक अनुक्रम है, हमें इसमें बिटोनिक पॉइंट ढूंढना है। जैसा कि हम जानते हैं कि बिटोनिक अनुक्रम संख्याओं का एक क्रम है जो पहले सख्ती से बढ़ रहा है फिर एक निश्चित बिंदु के बाद यह सख्ती से घट रहा है। यह बिंदु बिटोनिक बिंदु है। केवल बढ़ते या घटते क्रम के लिए, बिटोनिक बिंदु उपलब्ध

  1. पायथन में सबसे लंबा लगातार अनुक्रम

    मान लीजिए कि हमारे पास पूर्णांकों की एक सरणी है। हमें सबसे लंबे क्रमागत तत्वों के अनुक्रम की लंबाई ज्ञात करनी है। तो अगर इनपुट [100, 4, 250, 1, 3, 2] जैसा है, तो उत्तर 4 होगा, क्योंकि लगातार सबसे लंबा क्रम [1,2,3,4] है। इसे हल करने के लिए, हम इन चरणों का पालन करेंगे - सरणी सेट करें, सबसे लंबा:=0

  1. पायथन में एक स्ट्रिंग में सबसे लंबा दोहराव अनुक्रम कैसे खोजें?

    आप इनपुट स्ट्रिंग में प्रत्येक स्थिति से शुरू होने वाले प्रत्येक उप स्ट्रिंग का मिलान करने के लिए डिफॉल्टडिक्ट का उपयोग कर सकते हैं। गेटसब विधि एक जनरेटर विधि है जो हर बार कॉल करने पर एक छोटी उप स्ट्रिंग उत्पन्न करती है। उदाहरण from collections import defaultdict def getsubs(loc, s):     s