1 minute read

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 true if n new flowers can be planted in the flowerbed without violating the no-adjacent-flowers rule and false otherwise.

Example 1:

Input: flowerbed = [1,0,0,0,1], n = 1 Output: true Example 2:

Input: flowerbed = [1,0,0,0,1], n = 2 Output: false

/**
 * @param {number[]} flowerbed
 * @param {number} n
 * @return {boolean}
 */
var canPlaceFlowers = function (flowerbed, n) {
  let count = 0;
  const len = flowerbed.length;

  for (let i = 0; i < len; i++) {
    if (flowerbed[i] === 0) {
      const prevEmpty = i === 0 || flowerbed[i - 1] === 0;
      const nextEmpty = i === len - 1 || flowerbed[i + 1] === 0;

      if (prevEmpty && nextEmpty) {
        flowerbed[i] = 1;
        count++;
      }
    }
  }

  return count >= n;
};

The function initializes a count variable to keep track of the number of new flowers planted. It also stores the length of the flowerbed array in the len variable.

The function then iterates through the flowerbed array using a for loop. For each plot with a value of 0, it checks if the current plot and its adjacent plots are also empty (0). If so, it plants a new flower in the current plot, increments the count, and moves to the next plot.

After traversing the entire flowerbed, the function returns true if the count of planted flowers is greater than or equal to n, indicating that enough flowers can be planted without violating the no-adjacent-flowers rule. Otherwise, it returns false.

Leave a comment