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

Python में प्रत्येक क्वेरी को शामिल करने वाला न्यूनतम अंतराल ज्ञात करें

दिए गए अंतरालों की सूची और क्वेरीज़ के लिए, प्रत्येक क्वेरी को शामिल करने वाला सबसे छोटा अंतराल खोजें। अंतराल [left, right] क्वेरी q को शामिल करता है यदि left ≤ q ≤ right। आकार = right - left + 1।

एल्गोरिदम: स्वीप लाइन + मिन-हीप

  1. अंतरालों को आरंभ बिंदु के अनुसार अवरोही क्रम में सॉर्ट करें
  2. क्वेरीज़ को आरोही क्रम में सॉर्ट करें
  3. प्रत्येक क्वेरी के लिए (क्रम में):
    • वे सभी अंतराल हीप में डालें जिनका left ≤ q
    • हीप से वे अंतराल हटाएं जिनका right < q (क्वेरी शामिल नहीं करते)
    • हीप में न्यूनतम आकार वाला अंतराल उत्तर है

Python कार्यान्वयन


import heapq

def min_interval(intervals, queries):
    # अंतरालों को left के अनुसार अवरोही क्रम में सॉर्ट (पॉप के लिए)
    intervals = sorted(intervals)[::-1]
    
    # मिन-हीप: (आकार, right)
    heap = []
    # परिणाम मैप
    res = {}
    
    # क्वेरीज़ को सॉर्टेड क्रम में प्रोसेस करें
    for q in sorted(queries):
        # सभी अंतराल जिनका left ≤ q, हीप में डालें
        while intervals and intervals[-1][0] <= q:
            i, j = intervals.pop()
            if j >= q:  # केवल यदि right ≥ q (क्वेरी शामिल करता है)
                heapq.heappush(heap, (j - i + 1, j))
        
        # हीप से वे अंतराल हटाएं जिनका right < q
        while heap and heap[0][1] < q:
            heapq.heappop(heap)
        
        # उत्तर: हीप में न्यूनतम आकार या -1
        res[q] = heap[0][0] if heap else -1
    
    # मूल क्वेरी क्रम में परिणाम लौटाएं
    return [res[q] for q in queries]

# परीक्षण
intervals = [[2,5], [3,5], [4,7], [5,5]]
queries = [3, 4, 5, 6]
print(min_interval(intervals, queries))  # [3, 3, 1, 4]

व्याख्या

क्वेरीवैध अंतरालआकारन्यूनतम
3[2,5], [3,5]4, 33
4[2,5], [3,5], [4,7]4, 3, 43
5सभी चारों4, 3, 4, 11
6[4,7]44

जटिलता

  • समय: O((n + q) log n) - सॉर्टिंग + हीप ऑपरेशन्स
  • स्थान: O(n + q)

मुख्य बिंदु

  • क्वेरीज़ को सॉर्ट करने से स्वीप लाइन संभव होती है
  • मिन-हीप स्वचालित रूप से न्यूनतम आकार वाला वैध अंतराल शीर्ष पर रखता है
  • (size, right) टपल: size से मिन-हीप ऑर्डर, right से एक्सपायर जांच
  • ऑफलाइन क्वेरी प्रोसेसिंग पैटर्न
  1. पायथन में छड़ी काटने की न्यूनतम लागत ज्ञात करने का प्रोग्राम पायथन में छड़ी काटने की न्यूनतम लागत ज्ञात करने का प्रोग्राम

    मान लीजिए हमारे पास एक मान n और cuts नामक एक सरणी है। मान लीजिए n इकाई लंबाई की एक लकड़ी की छड़ी है। छड़ी 0 से n तक लेबल की गई है। यहां cuts[i] एक स्थिति दर्शाता है जहां हम काट सकते हैं। हमें कटौती क्रम में करनी चाहिए, लेकिन हम कटौती के क्रम को अपनी इच्छानुसार बदल सकते हैं। यहां एक कटौती की लागत का

  1. - पायथन में कट अंतराल को प्रतिच्छेद न करने वाले अंतराल खोजने का प्रोग्राम

    मान लीजिए हमारे पास एक सॉर्टेड और डिस्जॉइंट अंतराल सूची है और एक cut सूची जो एक अंतराल दर्शाती है। हमें अंतराल के उन सभी हिस्सों को हटाना है जो cut अंतराल के साथ प्रतिच्छेद करते हैं, और नई सूची लौटानी है।उदाहरण के लिए, यदि इनपुट intervals = [[2,11],[13,31],[41,61]] और cut = [8,46] है, तो आउटपुट [[2,

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

    मान लीजिए हमारे पास intervals नामक संख्याओं की एक 2D सूची है जहां प्रत्येक पंक्ति [start, end] (सम्मिलित) अंतराल दर्शाती है। एक अंतराल [a, b] (a < b) के लिए, इसका आकार (b - a) होता है। हमें दिए गए सूची में एक अंतराल जोड़ना होगा जैसे कि, सभी अंतरालों को मर्ज करने के बाद, हमें ठीक एक रेंज बचे। हमें जो