You have a long flowerbed in which some of the plots are planted, and some are not. However, flowers cannot be planted in adjacent plots.
Given an integer array flowerbed containing 0's and 1's, where 0 means empty and 1 means not empty, and an integer n, return if n new flowers can be planted in the flowerbed without violating the no-adjacent-flowers rule.
Example 1:
Input: flowerbed = [1,0,0,0,1,0,0,0,1], n = 2
Output: Given all flowers can be place
Example 2:
Input: flowerbed =[1,0,0,0,1,0,0,0,1], n = 3
Output: Given all flowers can not be place
Approach
Java
public class CanPlaceFlowers {
public static void main(String[] args) {
int flowerbed[] = { 1, 0, 0, 0, 1, 0, 0, 0, 1 };
int n = 3;
if (canPlaceFlowers(flowerbed, n)) {
System.out.println("Given all flowers can be place");
} else {
System.out.println("Given all flowers can not be place");
}
}
public static boolean canPlaceFlowers(int[] flowerbed, int n) {
int prev = 0;
for (int i = 0; i < flowerbed.length; i++) {
if (n > 0) {
int next = 0;
if (i < flowerbed.length - 1) {
next = flowerbed[i + 1];
}
if (prev == 0 && flowerbed[i] == 0 && next == 0) {
n--;
prev++;
flowerbed[i] = 1;
}
prev = flowerbed[i];
}
}
if (n == 0)
return true;
else
return false;
}
}
C++
#include <bits/stdc++.h>
using namespace std;
//function to check that we
//can place the flowers such that no
//two flowers are adjacent
bool canPlaceFlowers(int flowerbed[], int n,int m)
{
//count the no of current placed flower
int cnt=0;
int flag=0;
//if their is no flower to put
//return true
if(n==0)
return true;
//if only one element and only
//one flower to put then return true
//if flowerbed[0]=0
if(m==1&&n==1&&flowerbed[0]==0)
return true;
//iterate for all the index
for(int i=0;i<m;i++)
{
//if we are at first position
if(i==0)
{
//if first is empty and second also empty
//the increment cnt and make flowerbed[i]=1
if(flowerbed[i]==0&&i+1<m&&flowerbed[i+1]==0)
{
cnt++;
flowerbed[i]=1;
}
}
//if we are at the last position of the array
//if second last is empty and last is empty
//increment the count ans make the last as 1
else if(i==m-1)
{
if(i-1>=0&&flowerbed[i-1]==0&&flowerbed[i]==0)
{
cnt++;
flowerbed[i]=1;
}
}
//else we check left of position and right of position
else
{
//if left ,right and current index is 0 then
//increment the count and make the current index as 1
if(flowerbed[i]==0&&flowerbed[i-1]==0&&flowerbed[i+1]==0)
{
cnt++;
flowerbed[i]=1;
}
}
//if count becomes n break out of loop
//and make flag as 1
if(cnt==n)
{
flag=1;
break;
}
}
//if flag remain 0 then return false
if(flag==0)
return false;
//else return true
else
return true;
}
int main()
{
int flowerbed[]={1,0,0,0,1,0,0,0,1};
int n=3;
int m=sizeof(flowerbed)/sizeof(flowerbed[0]);
if(canPlaceFlowers(flowerbed,n,m))
cout<<"Given all flower can be place\n";
else
cout<<"Given all flowers can not be place\n";
return 0;
}