मान लीजिए कि हमारे पास एक n x n मैट्रिक्स है जहां प्रत्येक पंक्तियों और स्तंभों को बढ़ते क्रम में क्रमबद्ध किया गया है, हमें मैट्रिक्स में kth सबसे छोटा तत्व खोजना होगा। ध्यान दें कि यह क्रमबद्ध क्रम में kth सबसे छोटा तत्व है, kth अद्वितीय तत्व नहीं है। तो अगर इनपुट [[1,5,9], [10,11,13], [12,13,15]] जैसा है, अगर k =8 है, तो आउटपुट 13 होगा।
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
- चेकवैल () नामक एक विधि को परिभाषित करें और तर्क मैट्रिक्स और मूल्य हैं
- i:=0, j:=मैट्रिक्स की लंबाई[0] – 1, काउंटर:=0
- जबकि मैं <मैट्रिक्स की लंबाई और j>=0
- यदि मैट्रिक्स [i, j]> मान है, तो j को 1 से घटाएं अन्यथा काउंटर :=काउंटर + j + 1, i को 1 से बढ़ा दें
- वापसी काउंटर
- मुख्य विधि इस प्रकार होगी -
- n :=मैट्रिक्स की पंक्ति, उच्च :=निचला दायां कोना तत्व, निम्न :=ऊपरी बाएँ कोने का तत्व
- जबकि कम <=उच्च, करें
- मध्य =निम्न + (उच्च - निम्न)/2
- गिनती:=checkVal(मैट्रिक्स, मध्य)
- यदि गिनती
- कम वापसी
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -
उदाहरण
class Solution(object): def kthSmallest(self, matrix, k): """ :type matrix: List[List[int]] :type k: int :rtype: int """ n = len(matrix) high = matrix[n-1][n-1] low = matrix[0][0] while low<=high: mid = low + (high - low) /2 count = self.check_value(matrix,mid) if count< k: low = mid+1 else : high = mid-1 return int(low) def check_value(self, matrix, value): i = 0 j = len(matrix[0])-1 counter = 0 while(i<len(matrix) and j >=0): if matrix[i][j] > value: j-=1 else: counter+=j+1 i+=1 return counter matrix = [[1,5,9],[10,11,13],[12,13,15]] ob = Solution() print(ob.kthSmallest(matrix, 8))
इनपुट
matrix =[[1,5,9],[10,11,13],[12,13,15]] k = 8
आउटपुट
13