ধরুন আমাদের কাছে জোড় দৈর্ঘ্যের একটি অ্যারে আছে, এখানে এই অ্যারের বিভিন্ন সংখ্যা বিভিন্ন ধরণের ক্যান্ডির প্রতিনিধিত্ব করবে। এখন প্রতিটি সংখ্যার অর্থ সংশ্লিষ্ট ধরণের একটি ক্যান্ডি। আমাদের ভাই ও বোনের মধ্যে সমানভাবে মিষ্টি বিতরণ করতে হবে। বোনটি পেতে পারে এমন সর্বাধিক সংখ্যক ক্যান্ডি আমাদের খুঁজে বের করতে হবে৷
সুতরাং, যদি ইনপুটটি [1,1,2,3] এর মত হয়, তাহলে আউটপুট 2 হবে যেন আমরা মনে করি বোনের ক্যান্ডি [2,3] এবং ভাইয়ের ক্যান্ডি [1,1] আছে। এখন বোনের দুটি ভিন্ন ধরণের ক্যান্ডি আছে, ভাইয়ের কাছে কেবল এক ধরণের ক্যান্ডি রয়েছে৷
৷এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
-
একটি সেট s
সংজ্ঞায়িত করুন -
আরম্ভ করার জন্য i :=0, যখন i <ক্যান্ডির আকার, আপডেট করুন (i 1 দ্বারা বাড়ান), করবেন −
-
s
-এ ক্যান্ডি[i] ঢোকান
-
-
ন্যূনতম s এর আকার এবং ক্যান্ডির আকার / 2
ফেরত দিন
উদাহরণ
আরো ভালোভাবে বোঝার জন্য নিচের বাস্তবায়নটি দেখি -
#include <bits/stdc++.h> using namespace std; class Solution { public: int distributeCandies(vector<int>& candies){ unordered_set<int> s; for (int i = 0; i < candies.size(); i++) s.insert(candies[i]); return min(s.size(), candies.size() / 2); } }; main(){ Solution ob; vector<int> v = {1,1,2,3}; cout << (ob.distributeCandies(v)); }
ইনপুট
{1,1,2,3}
আউটপুট
2