একটি লম্বা ফুলবাগান আছে যেখানে কিছু প্লটে ফুল লাগানো আছে এবং কিছু খালি। নিচু শর্ত: দুটি সন্নিহিত প্লটে ফুল লাগানো যাবে না (পানি জন্য লড়াই করবে)। ফুলবাগান ০ ও ১ সম্বলিত অ্যারে আকারে দেওয়া আছে (০=খালি, ১=ভরা)। একটি সংখ্যা n দেওয়া আছে। চেক করতে হবে n টি নতুন ফুল লাগানো সম্ভব কিনা নিচু শর্ত লঙ্ঘন না করে।
ইনপুট flowerbed = [1,0,0,0,1], n = 1 হলে আউটপুট True।
সমাধানের ধাপসমূহ
- যদি flowerbed.size() < n হয়, false রিটার্ন করুন
- যদি আকার ১ এবং flowerbed[0]==0 এবং n==1 হয়, true রিটার্ন করুন
- প্রতিটি i এর জন্য:
- যদি n>0 হয়:
- i==0 হলে: flowerbed[0]==0 এবং flowerbed[1]==0 হলে flowerbed[0]=1, n--
- i==size-1 হলে: flowerbed[i]==0 এবং flowerbed[i-1]!=1 হলে flowerbed[i]=1, n--
- অন্যথায়: flowerbed[i]==0 এবং flowerbed[i-1]==0 এবং flowerbed[i+1]==0 হলে flowerbed[i]=1, n--
- যদি n==0 হয়, true রিটার্ন করুন
- যদি n>0 হয়:
- শেষে n==0 হলে true, অন্যথায় false রিটার্ন করুন
উদাহরণ
#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
bool canPlaceFlowers(vector<int>& flowerbed, int n) {
if (flowerbed.size() < n) return false;
if (flowerbed.size() == 1 && flowerbed[0] == 0 && n == 1) return true;
for (int i = 0; i < flowerbed.size(); i++) {
if (n > 0) {
if (i == 0) {
if (flowerbed[i] == 0 && flowerbed[1] == 0) {
flowerbed[0] = 1; n--;
}
}
else if (i == flowerbed.size() - 1) {
if (flowerbed[i] == 0 && flowerbed[i - 1] != 1) {
flowerbed[i] = 1; n--;
}
}
else if (flowerbed[i] == 0 && flowerbed[i + 1] == 0 && flowerbed[i - 1] == 0) {
flowerbed[i] = 1; n--;
}
}
if (n == 0) { return true; }
}
if (n == 0) { return true; }
return false;
}
};
int main(){
Solution ob;
vector<int> v = {1,0,0,0,1};
cout << (ob.canPlaceFlowers(v, 1));
}ইনপুট
{1,0,0,0,1}, 1আউটপুট
1