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

पायथन में सबसे लंबे सबसीक्वेंस की लंबाई ज्ञात करने का प्रोग्राम जहां आसन्न तत्वों के बीच निरपेक्ष अंतर अधिकतम k है


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

उदाहरण के लिए, nums = [5,6,2,1,-6,0,-1], k=4 के लिए आउटपुट 6 होगा।

एल्गोरिदम (सेगमेंट ट्री + कोऑर्डिनेट कम्प्रेशन)

  • सेगमेंट ट्री फ़ंक्शन update(i, x) और query(i, j) परिभाषित करें
  • snums := सॉर्ट किया गया nums, index := मान से सॉर्ट किए गए सूचकांक का मैप
  • प्रत्येक x in nums (मूल क्रम में) के लिए:
    • lo := bisect_left(snums, x-k), hi := bisect_right(snums, x+k)-1
    • count := query(lo, hi)
    • update(index[x], count+1)
    • ans = max(ans, count+1)
  • ans वापस करें

उदाहरण

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. - पायथन में LCM अधिकतम K वाला ऐरे का सबसे लंबा सबसीक्वेंस खोजें

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

  1. Python प्रोग्राम से ऐरे में सबसे बड़ा तत्व खोजना Python प्रोग्राम से ऐरे में सबसे बड़ा तत्व खोजना

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

  1. पायथन प्रोग्राम: लिस्ट में सभी पेयर्स के बीच एब्सोल्यूट डिफरेंस का योग ढूंढें पायथन प्रोग्राम: लिस्ट में सभी पेयर्स के बीच एब्सोल्यूट डिफरेंस का योग ढूंढें

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