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

सबसे लंबे बाद का पता लगाने का कार्यक्रम जहां प्रत्येक आसन्न तत्व के बीच पूर्ण अंतर पायथन में अधिकतम k है।


मान लीजिए कि हमें संख्याओं की एक सूची और दूसरा मान k दिया गया है। इस बार हमारा कार्य सबसे लंबे अनुक्रम की लंबाई ज्ञात करना है जहां प्रत्येक आसन्न तत्व के बीच पूर्ण अंतर अधिकतम k है।

इसलिए, यदि इनपुट nums =[5, 6, 2, 1, −6, 0, −1, k =4 जैसा है, तो आउटपुट 6 होगा।

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

  • फ़ंक्शन अपडेट () को परिभाषित करें। इसमें i, x लगेगा

  • मैं :=मैं + एन

  • जबकि i गैर-शून्य है, करें

    • segtree[i] :=अधिकतम segtree[i], x

    • मैं :=मैं / 2

  • फ़ंक्शन क्वेरी () को परिभाषित करें। यह मैं, जम्मू ले जाएगा

  • उत्तर :=−अनंतता

  • मैं :=मैं + एन

  • जे:=जे + एन + 1

  • जबकि i

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

      • उत्तर:=अधिकतम उत्तर, segtree[i]

      • मैं :=मैं + 1

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

      • जे:=जे - 1

      • उत्तर:=अधिकतम उत्तर, segtree[j]

    • मैं :=मैं / 2

    • जे:=जे/2

  • वापसी उत्तर

  • अब, मुख्य कार्य में, निम्न कार्य करें -

  • अंक =[5, 6, 2, 1, −6, 0, −1]

  • कश्मीर =4

  • n =2 से घात (लघुगणक आधार 2 ((अंकों की लंबाई) + 1) + 1)

  • सेगट्री :=[0] * 100000

  • snums :=सूची संख्या क्रमित करें

  • अनुक्रमणिका :=एक संग्रह बनाएँ जहाँ x:i प्रत्येक अनुक्रमणिका के लिए i और तत्व x in (snums)

  • उत्तर :=0

  • अंकों में प्रत्येक x के लिए, करें

    • lo :=snums से बाईं ओर की स्थिति लौटाएं, जहां (x - k) क्रमबद्ध क्रम को बनाए रखते हुए डाला जा सकता है

    • hi :=(snums से सबसे बाईं ओर की स्थिति, जहां (x + k) क्रमबद्ध क्रम को बनाए रखते हुए डाला जा सकता है) - 1

    • गिनती:=क्वेरी (लो, हाय)

    • अद्यतन (सूचकांक [x], गिनती + 1)

    • उत्तर:=अधिकतम उत्तर, गिनती + 1

  • वापसी उत्तर

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

उदाहरण

import math, bisect
class Solution:
   def solve(self, nums, k):
      n = 2 ** int(math.log2(len(nums) + 1) + 1)
      segtree = [0] * 100000
      def update(i, x):
         i += n
         while i:
            segtree[i] = max(segtree[i], x)
            i //= 2
         def query(i, j):
            ans = −float("inf")
            i += n
            j += n + 1
            while i < j:
               if i % 2 == 1:
                  ans = max(ans, segtree[i])
                  i += 1
               if j % 2 == 1:
                  j −= 1
                  ans = max(ans, segtree[j])
               i //= 2
               j //= 2
            return ans
         snums = sorted(nums)
         index = {x: i for i, x in enumerate(snums)}
         ans = 0
         for x in nums:
            lo = bisect.bisect_left(snums, x − k)
            hi = bisect.bisect_right(snums, x + k) − 1
            count = query(lo, hi)
            update(index[x], count + 1)
            ans = max(ans, count + 1)
      return ans
ob = Solution()
print(ob.solve([5, 6, 2, 1, −6, 0, −1], 4))

इनपुट

[5, 6, 2, 1, −6, 0, −1], 4

आउटपुट

6

  1. पायथन में अधिकतम K पर LCM वाले सरणी का सबसे लंबा क्रम ज्ञात करें

    मान लीजिए कि हमारे पास n अलग-अलग संख्याओं का एक सरणी A है और एक अन्य धनात्मक पूर्णांक K है, तो हमें उस सरणी में सबसे लंबा उप-अनुक्रम खोजना होगा, जिसमें अधिकतम K पर कम से कम सामान्य गुणक (LCM) हों। LCM और उप की लंबाई वापस करने के बाद -अनुक्रम, प्राप्त उप-अनुक्रम के तत्वों के अनुक्रमित (0 से शुरू) के

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

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

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

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