কম্পিউটার টিউটোরিয়াল

C++-এ সর্বোচ্চ পানি ধারণকারী কন্টেইনার (Container With Most Water)

আমাদের কন্টেইনারের দেওয়ালের উচ্চতা দিয়ে একটি অ্যারে দেওয়া আছে। লক্ষ্য হলো সর্বোচ্চ পানি ধারণকারী কন্টেইনার বের করা। দুটি দেওয়ালের মধ্যে দূরত্ব (width) = j - i (0 <= i < j <= N)। পানির উচ্চতা = দুটি দেওয়ালের ন্যূনতম। অর্থাৎ Area = min(Arr[i], Arr[j]) * (j - i)। এই এরিয়ার সর্বোচ্চ করা উচিত।

ইনপুট

Arr[]= { 5,1,2,3,5 }

আউটপুট

Maximum water area : 20

ব্যাখ্যা: Arr[0]=5 এবং Arr[4]=5, width=4, area=5*4=20 (সর্বোচ্চ)।

ইনপুট

Arr[]= { 1, 5, 4, 3, 2, 4 }

আউটপুট

Maximum water area : 16

ব্যাখ্যা: Arr[1]=5 এবং Arr[5]=4, width=4, area=4*4=16 (সর্বোচ্চ)।

প্রোগ্রামে ব্যবহৃত পদ্ধতি (Two Pointer)

  • walls[] অ্যারে দিয়ে হাইট স্টোর।
  • mostwater(int A[], int len) ফাংশন এরিয়া রিটার্ন করে।
  • দুটি পয়েন্টার: l=0 (বাম), r=len-1 (ডান)।
  • area, maxarea = 0।
  • while (l < r): lwall=A[l], rwall=A[r], minwall=min(lwall, rwall)।
  • area = minwall * (r-l)। maxarea আপডেট।
  • যদি lwall < rwall হয় তবে l++ অন্যথায় r-- (ছোট দেওয়ালটি মুভ করা)।
  • maxarea রিটার্ন।

উদাহরণ কোড

#include <iostream>
using namespace std;

int mostwater(int A[], int len){
    int r = len-1, l = 0;
    int area = 0, maxarea = 0;
    while (l < r){
        int lwall = A[l];
        int rwall = A[r];
        int minwall = min(lwall, rwall);
        area = minwall * (r - l);
        maxarea = max(maxarea, area);
        if (lwall < rwall)
            l++;
        else
            r--;
    }
    return maxarea;
}

int main(){
    int walls[] = {1, 5, 4, 3, 2, 4};
    int num = sizeof(walls) / sizeof(walls[0]);
    cout << "Container with Most water has area:" << mostwater(walls, num);
    return 0;
}

আউটপুট

Container with Most water has area:16
  1. C++-এ আয়তক্ষেত্রের এলিয়া হিসাব

  2. C++-এ দিয়ে বাহুর দৈর্ঘ্য দিয়ে n-বাহু নিয়মিত পলিগনের ক্ষেত্রফল

  3. C++-এ দেয়া বাহুসমূহ থেকে যেকোনো ট্রায়্যাঙ্গেলের সার্কামসার্কেলের এলিয়া

  4. পাইথনে সর্বোচ্চ পানির কন্টেইনার