ধরুন আমাদের কাছে সংখ্যা নামক পূর্ণসংখ্যা সহ একটি অ্যারে আছে, আমাদের আরও দুটি মান m এবং k আছে। এখন, আমরা m bouquets করতে হবে. একটি তোড়া তৈরি করতে আমাদের বাগান থেকে k সংলগ্ন ফুলের প্রয়োজন। এখানে বাগানে n বিভিন্ন ফুল রয়েছে, ith ফুলটি প্রস্ফুটিত হবে [i] দিনে। প্রতিটি ফুল শুধুমাত্র একটি bouquets ভিতরে ব্যবহার করা যেতে পারে. আমরা বাগান থেকে m bouquets করতে অপেক্ষা করতে হবে দিনের ন্যূনতম সংখ্যা খুঁজে বের করতে হবে. যদি আমরা m bouquets তৈরি করতে না পারি, তাহলে -1 ফেরত দিন।
সুতরাং, যদি ইনপুটটি bloomDay =[5,5,5,5,10,5,5] m =2 k =3 এর মত হয়, তাহলে আউটপুট হবে 10 কারণ আমাদের 2 (m =2) bouquets প্রয়োজন এবং প্রতিটি 3টি ফুল আছে।
-
5 তম দিনের পর:[x, x, x, x, _, x, x], আমরা প্রথম তিনটি ফুলের একটি তোড়া বানাতে পারি, কিন্তু আরেকটি তোড়া বানাতে পারি না
-
10 দিনের পর:[x, x, x, x, x, x, x], এখন আমরা বিভিন্ন উপায়ে দুটি তোড়া তৈরি করতে পারি।
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
-
n :=ব্লুমডে এর আকার
-
যদি m * k> n হয়, তাহলে
-
রিটার্ন -1
-
-
সম্ভাব্য একটি ফাংশন সংজ্ঞায়িত করুন()। এটি x
লাগবে -
গণনা :=0, তোড়া :=0
-
ব্লুমডে প্রতিটি ডি এর জন্য, করুন
-
যদি d <=x, তাহলে
-
গণনা :=গণনা + 1
-
যদি গণনা k এর সমান হয়, তাহলে
-
bouquets :=bouquets + 1
-
গণনা :=0
-
-
-
অন্যথায়,
-
গণনা :=0
-
-
-
bouquets>=m, অন্যথায় মিথ্যা
হলে true ফেরত দিন -
প্রধান পদ্ধতি থেকে নিম্নলিখিতগুলি করুন -
-
বাম :=0, ডানে :=1 + সর্বাধিক ব্লুমডে
-
যখন বামে <ডানে, কর
-
মধ্য :=(বাম + ডান) /2
-
যদি সম্ভব (মাঝ) সত্য হয়, তাহলে
-
ডান :=মধ্য
-
-
অন্যথায়,
-
বাম :=মধ্য + 1
-
-
-
যদি সম্ভব (বামে) সত্য হয়, তাহলে
-
বাম দিকে ফিরে যান
-
-
অন্যথায় বাম + 1
ফিরে যান
আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -
উদাহরণ
def সমাধান(bloomDay, m, k):n =len(bloomDay) if m * k> n:রিটার্ন -1 def সম্ভব x:গণনা +=1 যদি গণনা ==k:তোড়া +=1 গণনা =0 অন্য:গণনা =0 ফেরত তোড়া>=m বাম, ডান =0, সর্বোচ্চ (ব্লুমডে) + 1 যখন বামে <ডান:মধ্য =(বাম + ডান)//2 যদি সম্ভব হয় (মাঝে):ডান =মাঝামাঝি অন্য:বাম =মধ্য + 1 যদি সম্ভব হয় (বাম):অন্য বামে ফিরে যান:বাম দিকে ফিরে যান + 1ব্লুমডে =[5,5,5,5,10,5, 5]m =2k =3প্রিন্ট(সল্ভ(ব্লুমডে, মি, কে))
ইনপুট
<প্রে>[5,5,5,5,10,5,5], 2, 3আউটপুট
10