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

एक सरणी में सूचकांक का पता लगाने के लिए कार्यक्रम जहां सबसे बड़ा तत्व पायथन में स्थित है

मान लीजिए, हमें 'टेस्टअरे' नामक एक वर्ग दिया गया है जिसमें एक सरणी है जो अन्य वर्गों और दो सार्वजनिक सदस्य कार्यों की लंबाई () और तुलना () द्वारा सुलभ नहीं है। फ़ंक्शन लंबाई () सरणी की लंबाई देता है और फ़ंक्शन तुलना () सरणी से विभिन्न उप-सरणी की तुलना करते हुए तीन अलग-अलग मान देता है। फ़ंक्शन इनपुट के रूप में चार मान l, r, x, y लेता है और इस तरह काम करता है -

  • अगर (सरणी [एल] + सरणी [एल + 1] + …… + सरणी [आर -1] + सरणी [आर])> (सरणी [एक्स] + सरणी [एक्स + 1] +... ...+सरणी[y1]+सरणी [y]); यह 1 लौटाता है

  • अगर (सरणी [एल] + सरणी [एल + 1] + …… + सरणी [आर -1] + सरणी [आर]) =(सरणी [एक्स] + सरणी [एक्स + 1] +... ...+सरणी[y1]+सरणी [y]); यह 0 लौटाता है

  • अगर (सरणी [एल] + सरणी [एल + 1] + …… + सरणी [आर -1] + सरणी [आर]) <(सरणी [एक्स] + सरणी [एक्स + 1] +... ...+सरणी[y1]+सरणी [y]); यह -1 लौटाता है

हमें एरे में अधिकतम एलीमेंट के इंडेक्स को बिना ऐरे को एक्सेस किए और केवल क्लास के मेंबर फंक्शन्स का उपयोग करके खोजना होगा।

इसलिए, यदि इनपुट सरणी की तरह है =[8, 4, 2, 12, 11, 8, 4, 2, 7], तो आउटपुट 3 होगा। सरणी में सबसे बड़ा तत्व 12 है और यह सूचकांक पर स्थित है 3.

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

  • n:=लंबाई ()

  • कम:=0

  • उच्च :=n - 1

  • जबकि कम <उच्च, करें

    • मध्य :=(निम्न+उच्च+1) / 2

      . का न्यूनतम मान
    • अगर (लो+हाई+1) मॉड 2, 0 के समान है, तो

      • रेस:=तुलना करें (निम्न, मध्य-1, मध्य, उच्च)

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

        • उच्च :=मध्य -1

      • अन्यथा,

        • कम :=मध्य

    • अन्यथा,

      • रेस :=तुलना करें (निम्न, मध्य-1, मध्य+1, उच्च)

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

        • उच्च :=मध्य -1

      • अन्यथा जब रेस -1 के समान हो, तब

        • निम्न :=मध्य -1

      • अन्यथा,

        • बीच में लौटें

    • यदि उच्च निम्न के समान है, तो

      • उच्च वापसी

  • वापसी -1

उदाहरण (पायथन)

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

class TestArray:
   def __init__(self, array) -> None:
      self.__arr = array

   def length(self):
      return len(self.__arr)

   def compare(self, l, r, x, y):
      val1 = sum(i for i in self.__arr[l:r+1])
      val2 = sum(j for j in self.__arr[x:y+1])
      if val1 > val2:
         return 1
      elif val1 == val2:
         return 0
      elif val1 < val2:
         return -1

def solve(reader):
   n = reader.length()
   low,high = 0,n - 1
   while low < high:
      mid = (low+high+1)//2
      if (low+high+1)%2 == 0:
         res = reader.compare(low,mid-1,mid,high)
         if res == 1:high = mid - 1
         else:low = mid
      else:
         res = reader.compare(low,mid-1,mid+1,high)
         if res == 1:high = mid - 1
         elif res == -1:low = mid + 1
         else: return mid
      if high == low: return high
   return -1

arr_ob = TestArray([8, 4, 2, 12, 11, 8, 4, 2, 7])
print(solve(arr_ob))

इनपुट

[8, 4, 2, 12, 11, 8, 4, 2, 7]

आउटपुट

3

  1. एक सरणी में सबसे बड़ा तत्व खोजने के लिए पायथन प्रोग्राम

    इस लेख में, हम नीचे दिए गए समस्या कथन के समाधान के बारे में जानेंगे। समस्या कथन - हमें एक सरणी दी गई है, हमें सरणी के सबसे बड़े तत्व की गणना करने की आवश्यकता है। यहां हम ब्रूटफोर्स दृष्टिकोण का उपयोग करते हैं जिसमें हम पूरे लूप को पार करके सबसे बड़े तत्व की गणना करते हैं और तत्व प्राप्त करते हैं।

  1. सरणी का योग खोजने के लिए पायथन कार्यक्रम

    इस लेख में, हम दिए गए समस्या कथन को हल करने के लिए समाधान और दृष्टिकोण के बारे में जानेंगे। समस्या कथन एक इनपुट के रूप में एक सरणी को देखते हुए, हमें दिए गए सरणी के योग की गणना करने की आवश्यकता है। यहां हम ब्रूट-फोर्स अप्रोच का अनुसरण कर सकते हैं, यानी एक सूची को पार करना और प्रत्येक तत्व को एक खा

  1. एक सरणी में सबसे बड़ा तत्व खोजने के लिए पायथन कार्यक्रम

    इस लेख में, हम दिए गए समस्या कथन को हल करने के लिए समाधान और दृष्टिकोण के बारे में जानेंगे। समस्या कथन एक इनपुट के रूप में एक सरणी को देखते हुए, हमें सरणी में सबसे बड़ा तत्व खोजने की जरूरत है। दृष्टिकोण हम अधिकतम को पहले तत्व के रूप में प्रारंभ करते हैं। इसके बाद, हम दिए गए सरणी को दूसरे तत्व से अ