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

C++-এ ফ্রুট ইন্টু বাস্কেটস


ট্রি অ্যারে দেওয়া, tree[i] = i-তম ট্রির ফলের টাইপ। দুইটি বাস্কেট, প্রতিটি এক টাইপের ফল ধারণ করতে পারে। যেকোনো ট্রি থেকে শুরু করে ডানদিকে যেতে হবে। সর্বোচ্চ কতটি ফল সংগ্রহ করা যায়?

উদাহরণ: [3,3,3,1,2,1,1,2,3,3,4] → ৫ ([1,2,1,1,2] বা [2,1,1,2,3])।

সমাধানের ধাপসমূহ

  • স্লাইডিং উইন্ডো: मैপ m ফলের টাইপ -> কাউন্ট।
  • রাইট পয়েন্টার i বাড়ান, m[tree[i]]++।
  • যদি m.size() > 2 হয়, লেফট পয়েন্টার j বাড়িয়ে উইন্ডো সঙ্কুচিত করুন (m[tree[j]]--, ০ হলে erase)।
  • উত্তর = max(ans, i-j+1)।

C++ উদাহরণ

#include <bits/stdc++.h>
using namespace std;

class Solution {
public:
    int totalFruit(vector<int>& tree) {
        unordered_map<int, int> m;
        int j = 0, ans = 0, n = tree.size();
        for (int i = 0; i < n; i++) {
            m[tree[i]]++;
            while (m.size() > 2) {
                if (--m[tree[j]] == 0) m.erase(tree[j]);
                j++;
            }
            ans = max(ans, i - j + 1);
        }
        return ans;
    }
};

int main() {
    vector<int> v = {3,3,3,1,2,1,1,2,3,3,4};
    Solution ob;
    cout << ob.totalFruit(v);
}

ইনপুট

[3,3,3,1,2,1,1,2,3,3,4]

আউটপুট

5
  1. C++-এ একটি সেটকে k সাবসেটে ভাগ করার পদ্ধতির সংখ্যা গণনা

  2. C++-এ একটি বোর্ডকে বর্গাকারে কাটার ন্যূনতম খরচ

  3. C++-এ Binary Search Tree-এ নোড ইনসার্ট করা

  4. C++-এ একটি char কে int-এ কনভার্ট কীভাবে করবেন