मान लीजिए कि हमारे पास बंद अंतराल की दो सूचियां हैं, यहां अंतराल की प्रत्येक सूची जोड़ीदार असंबद्ध और क्रमबद्ध क्रम में है। हमें इन दो अंतराल सूचियों का प्रतिच्छेदन ज्ञात करना है।
हम जानते हैं कि बंद अंतराल [ए, बी] को <=बी के रूप में दर्शाया गया है। एक <=x <=b के साथ वास्तविक संख्या x का समुच्चय। दो बंद अंतरालों का प्रतिच्छेदन वास्तविक संख्याओं का एक समूह होता है जो या तो खाली होता है, या एक बंद अंतराल के रूप में दर्शाया जा सकता है।
तो अगर इनपुट ए =[[0,2], [5,10], [13,23], [24,25]] और बी =[[1,5], [8,12],[ 15,24], [25,27]], तो आउटपुट [[1,2], [5,5], [8,10], [15,23], [24,24], [25] होगा। ,25]].
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
-
एक सूची बनाएं, सेट करें I :=0 और j :=0
-
इंटरसेक्ट () नामक एक विधि को परिभाषित करें, इसमें ए और बी लगेगा -
-
अगर a[0] <=b[0] और a[1]>=b[0], तो सही लौटें,
-
अन्यथा जब b[0] <=a[0] और b[1]>=a[0], तो सही लौटें, अन्यथा झूठी वापसी करें
-
जबकि मैं B का आकार
-
अगर प्रतिच्छेद (ए [i], बी [i])
-
अस्थायी:=अधिकतम A[i, 0], B[j, 0], न्यूनतम A[i,1] और B[j, 1]
-
ए [i, 0]:=अस्थायी [1] + 1, बी [जे, 0]:=अस्थायी [1] + 1 पी>
-
अगर A[i,0]> A[i,1] या A[i,1] <=temp[0], तो i को 1 से बढ़ा दें
-
अगर B[j,0]>B[j,1] या B[j,1] <=temp[0]:तो j को 1 से बढ़ाएं
-
result.append(temp)
-
अगले पुनरावृत्ति के लिए छोड़ें
-
-
अगर A[i,0]> B[j, 1], तो j को 1 से बढ़ा दें, अन्यथा i को 1 से बढ़ा दें
-
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -
उदाहरण
class Solution(object): def intervalIntersection(self, A, B): result = [] i,j = 0,0 while i < len(A) and j < len(B): if self.intersect(A[i],B[j]): temp = [max(A[i][0],B[j][0]),min(A[i][1],B[j][1])] A[i][0]=temp[1]+1 B[j][0] = temp[1]+1 if A[i][0] > A[i][1] or A[i][1] <= temp[0]: i+=1 if B[j][0]>B[j][1] or B[j][1] <= temp[0]: j+=1 result.append(temp) continue if A[i][0]>B[j][1]: j+=1 else: i+=1 return result def intersect(self,a,b): if a[0]<=b[0] and a[1]>=b[0]: return True if b[0]<=a[0] and b[1] >=a[0]: return True return False ob = Solution() print(ob.intervalIntersection([[0,2],[5,10],[13,23],[24,25]],[[1,5],[8,12],[15,24],[25,27]]))
इनपुट
[[0,2],[5,10],[13,23],[24,25]] [[1,5],[8,12],[15,24],[25,27]]
आउटपुट
[[1, 2], [5, 5], [8, 10], [15, 23], [24, 24], [25, 25]]