public boolean canPlaceFlowers(List<Boolean> flowerbed, int numberToPlace)
/* Suppose 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 - they would compete for water and both would die. Given a flowerbed (represented as an array containing booleans), return if a given number of new flowers can be planted in it without violating the no-adjacent-flowers rule. */ public boolean canPlaceFlowers(List<Boolean> flowerbed, int numberToPlace) { this.hashCode(); if(flowerbed == null || flowerbed.isEmpty()){ throw new IllegalArgumentException("bed is empty"); } if(numberToPlace==0) return true; if(flowerbed.size()==1){ return !flowerbed.get(0) && numberToPlace<=1; } int counter = 0; for(int i=0; i< flowerbed.size(); i++){ if(!flowerbed.get(i)){ if((i==0 && !flowerbed.get(i+1)) || (i==flowerbed.size()-1 && !flowerbed.get(i-1)) || (!flowerbed.get(i+1) && !flowerbed.get(i-1)) ){ //place the flower flowerbed.set(i, true); counter++; if(counter==numberToPlace) return true; } } } return false; }
public class Solution { public boolean canPlaceFlowers(int[] flowerbed, int n) { int count = 0; for(int i = 0; i < flowerbed.length && count < n; i++) { if(flowerbed[i] == 0) { //get next and prev flower bed slot values. If i lies at the ends the next and prev are considered as 0. int next = (i == flowerbed.length - 1) ? 0 : flowerbed[i + 1]; int prev = (i == 0) ? 0 : flowerbed[i - 1]; if(next == 0 && prev == 0) { flowerbed[i] = 1; count++; } } } return count == n; } }