मान लीजिए कि हमारे पास n गैर-ऋणात्मक पूर्णांकों का एक सेट है a1, a2, ..., a, प्रत्येक मान निर्देशांक (i, a[i]) पर एक बिंदु का प्रतिनिधित्व करता है। n लंबवत रेखाएं इस तरह से मौजूद हैं कि रेखा i के दो समापन बिंदु (i, a[i]) और (i, a[0]) पर हैं। हमें दो लाइनें ढूंढनी हैं, जो एक्स-अक्ष के साथ मिलकर एक कंटेनर बनाती हैं, इसलिए हमारा लक्ष्य दो कॉलम ढूंढना है जहां पानी की मात्रा अधिकतम हो। तो अगर सरणी [1,8,6,2,5,4,8,3,7] की तरह है, तो यह होगा
छायांकित भाग में, ऊँचाई 7 है और 7 खंड हैं, इसलिए कुल क्षेत्रफल वास्तव में 7 * 7 =49 है। यह आउटपुट है।
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे
- निम्न:=0, उच्च:=गिरफ्तारी की लंबाई -1, उत्तर:=0
- जबकि कम <उच्च
- अगर गिरफ्तारी [निम्न] <गिरफ्तारी [उच्च]:min_h :=ऊंचाई [निम्न] और min_ind :=कम
- अन्यथा min_h :=height[high] and min_ind :=high
- उत्तर :=अधिकतम (उच्च-निम्न)* min_h और उत्तर
- यदि निम्न + 1 =min_ind + 1, तो निम्न को 1 से बढ़ाएं अन्यथा उच्च को 1 से घटाएं
- वापसी उत्तर
उदाहरण
बेहतर समझ प्राप्त करने के लिए आइए निम्नलिखित कार्यान्वयन को देखें -
class Solution(object): def maxArea(self, height): low = 0 high = len(height) - 1 ans = 0 while low < high: if height[low]<height[high]: min_height = height[low] min_height_index = low else: min_height = height[high] min_height_index = high ans = max(((high - low) ) * min_height,ans) if low+1==min_height_index+1: low+=1 else: high-=1 return ans ob1 = Solution() print(ob1.maxArea([1,8,6,2,5,4,8,3,7]))
इनपुट
[1,8,6,2,5,4,8,3,7]
आउटपुट
49