हमें कंटेनर की दीवारों की ऊंचाई की एक सरणी दी गई है। लक्ष्य वह कंटेनर ढूंढना है जो पानी की अधिकतम मात्रा धारण कर सके। चूंकि दीवारों की ऊंचाई सरणी के तत्व हैं, उनके बीच की दूरी को दो दीवारों के बीच की चौड़ाई माना जाता है। उदाहरण के लिए ऊंचाई Arr[i] और Arr[j] की दीवारों के बीच j-i चौड़ाई होती है (0<=i इसलिए पानी की ऊंचाई कम ऊंचाई तक होगी, यदि Arr[i] < Arr[j] तो पानी की ऊंचाई Arr[i] होगी। चौड़ाई j-i है इसलिए पानी का क्षेत्रफल = Arr[i] * (j - i)। हमें ऐसा अधिकतम क्षेत्रफल ढूंढना है। चित्र में दिखाए अनुसार, दीवारों की ऊंचाई 5,1,2,3 और दीवारों के बीच अधिकतम चौड़ाई है अधिकतम क्षेत्रफल वाला कंटेनर अधिकतम पानी धारण करेगा, क्षेत्रफल=20, दीवारें Arr[0] और Arr[4] अधिकतम क्षेत्रफल वाला कंटेनर अधिकतम पानी धारण करेगा, क्षेत्रफल=16, दीवारें Arr[0] और Arr[4]इनपुट
Arr[]= { 5,1,2,3,5 } आउटपुट
अधिकतम पानी का क्षेत्रफल: 20
व्याख्या

Arr[0] और Arr[4] चौड़ाई=4, क्षेत्रफल = Arr[0]<=Arr[4] → 5*4=20 Arr[1] और Arr[4] चौड़ाई=3, क्षेत्रफल = Arr[1]<=Arr[4] → 1*4=4 Arr[2] और Arr[0] या Arr[4] चौड़ाई=4, क्षेत्रफल = Arr[0]<=Arr[0] → 2*2=4 Arr[3] और Arr[0] चौड़ाई=3, क्षेत्रफल = Arr[0]<=Arr[0] → 3*3=9 Arr[4] और Arr[0] चौड़ाई=4, क्षेत्रफल = Arr[0]<=Arr[4] → 5*4=20
इनपुट
Arr[]= { 1, 5, 4, 3, 2, 4 } आउटपुट
अधिकतम पानी का क्षेत्रफल: 16
व्याख्या
Arr[0] और Arr[5] चौड़ाई=5, क्षेत्रफल = Arr[0]<=Arr[5] → 1*5=5 Arr[1] और Arr[5] चौड़ाई=4, क्षेत्रफल = Arr[1]<=Arr[5] → 4*4=16 Arr[2] और Arr[5] चौड़ाई=3, क्षेत्रफल = Arr[2]<=Arr[5] → 3*4=12 Arr[3] और Arr[1] चौड़ाई=2, क्षेत्रफल = Arr[3]<=Arr[1] → 3*2=6 Arr[4] और Arr[1] चौड़ाई=3, क्षेत्रफल = Arr[1]<=Arr[4] → 2*3=6 Arr[5] और Arr[1] चौड़ाई=4, क्षेत्रफल = Arr[1]<=Arr[4] → 4*4=16
प्रयुक्त दृष्टिकोण
उदाहरण कोड
#include<iostream> using namespace std; int mostwater(int A[], int len){ int r=len-1; //कंटेनर की दाएं दीवार का इंडेक्स int l=0; //कंटेनर की बाएं दीवार का इंडेक्स int area=0,maxarea=0; int minwall,lwall,rwall; while (l < r){ // अधिकतम क्षेत्रफल की गणना lwall = A[l]; //कंटेनर की बाएं दीवार की ऊंचाई rwall =A[r]; //कंटेनर की दाएं दीवार की ऊंचाई minwall=lwall<=rwall?lwall:rwall; //दोनों दीवारों में से न्यूनतम पानी की ऊंचाई है area=minwall*(r-l); // क्षेत्रफल न्यूनतम दीवार * चौड़ाई (r-l) maxarea=area>=maxarea?area:maxarea; if (l < r) l += 1; else r -= 1; } return maxarea; } int main(){ int walls[] = {1, 5, 4, 3, 2, 4}; int num = sizeof(walls) / sizeof(walls[0]); cout << endl <<"सबसे अधिक पानी वाले कंटेनर का क्षेत्रफल:"<< mostwater(walls,num); } आउटपुट
सबसे अधिक पानी वाले कंटेनर का क्षेत्रफल: 16