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

पायथन में स्नैपशॉट ऐरे


मान लीजिए हमें एक SnapshotArray लागू करना है जो निम्न इंटरफेसेस का समर्थन करता है -

  • SnapshotArray(int length) यह दिए गए लंबाई के साथ ऐरे-जैसी डेटा संरचना को इनिशियलाइज़ करेगा। प्रारंभ में, प्रत्येक एलिमेंट 0 के बराबर होता है।

  • set(index, val) यह दिए गए इंडेक्स पर एलिमेंट को val के बराबर सेट करेगा।

  • snap() ऐरे का स्नैपशॉट लेगा और snap_id लौटाएगा: snap() को कॉल किए गए कुल समय माइनस 1।

  • get(index, snap_id) यह दिए गए इंडेक्स पर मान लौटाएगा, जब हमने दिए गए snap_id के साथ स्नैपशॉट लिया था।

इसलिए यदि ऐरे का आकार 2 है, इसे [0, 5] का उपयोग करके सेट किया जाता है, उसके बाद हम एक स्नैप लेते हैं, यह 0 लौटाएगा, फिर [0, 6] का उपयोग करके सेट करें, और get(0, 0), यह 5 लौटाएगा।

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

  • इनिशियलाइज़ मेथड इस तरह होगा -

  • current := 0

  • arr := लंबाई + 1 संख्या के 2d ऐरे [[0, 0]]

  • set() मेथड इस तरह होगा -

  • temp := arr[index] का अंतिम एलिमेंट

  • यदि temp[0] = current, तो arr[index] के अंतिम एलिमेंट के इंडेक्स 1 का एलिमेंट := val

  • अन्यथा [current, val] को arr[index] में इन्सर्ट करें

  • snap() मेथड इस तरह होगा-

  • current को 1 से बढ़ाएं, काउंट से एक कम लौटाएं

  • get() मेथड इस तरह होगा -

  • temp := arr[index], low := 0, high := temp की लंबाई - 1

  • जब तक low < high

    • mid := low + (high - low) / 2

    • यदि temp[mid, 0] <= snap_id, तो low := mid, अन्यथा high := mid - 1

  • temp[low, 1] लौटाएं

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

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

class SnapshotArray(object):
    def __init__(self, length):
        self.current = 0
        self.arr = [[[0,0]] for i in range(length+1)]
    def set(self, index, val):
        temp = self.arr[index][-1]
        if temp[0] == self.current:
            self.arr[index][-1][1] = val
        else:
            self.arr[index].append([self.current,val])
    def snap(self):
        self.current+=1
        return self.current -1
    def get(self, index, snap_id):
        temp = self.arr[index]
        low = 0
        high = len(temp)-1
        while low < high:
            mid = low + (high - low+1 )//2
            if temp[mid][0]<=snap_id:
                low = mid
            else:
                high = mid -1
        return temp[low][1]

ob = SnapshotArray(3)
ob.set(0,5)
print(ob.snap())
ob.set(0,6)
print(ob.get(0,0))

इनपुट

3 का उपयोग करके ऐरे इनिशियलाइज़ करें, फिर set(0,5), snap(), set(0,6), get(0, 0) कॉल करें

आउटपुट

0
5

  1. - पायथन में सरणी विभाजन I

    मान लीजिए हमारे पास 2n पूर्णांकों की एक सरणी है, हमें इन पूर्णांकों को n जोड़े में समूहित करना है, जैसे (a1, b1), (a2, b2), ..., (an, bn) जो 1 से n तक की सीमा में सभी i के लिए min(ai, bi) का योग यथासंभव बड़ा बनाता है। उदाहरण के लिए, यदि इनपुट [1, 4, 3, 2] है, तो आउटपुट 4 होगा। यहां n=2 है। और जोड़ो

  1. - पायथन में सरणी घुमाएं

    मान लीजिए हमारे पास एक सरणी A है। हमें इसे k चरणों से दाईं ओर घुमाना है। यदि सरणी A = [5, 7, 3, 6, 8, 1, 5, 4] है, और k = 3, तो आउटपुट [1,5,4,5,7,3,6,8] होगा। चरण इस तरह हैं: [4,5,7,3,6,8,1,5] [5,4,5,7,3,6,8,1] [1,5,4,5,7,3,6,8] इसे हल करने के लिए हम इन चरणों का पालन करेंगे। मान लें n सरणी का आक

  1. - पायथन में क्रमबद्ध सरणी मर्ज करें

    मान लीजिए हमारे पास दो क्रमबद्ध सरणी A और B हैं। हमें उन्हें मर्ज करना है और केवल एक क्रमबद्ध सरणी C बनाना है। सूचियों का आकार भिन्न हो सकता है। उदाहरण के लिए, मान लीजिए A = [1,2,4,7] और B = [1,3,4,5,6,8], तो मर्ज की गई सूची C [1,1,2,3,4,4,5,6,7,8] होगी। हल करने के चरण i := 0, j := 0 और end := A क