DEV Community

Prem
Prem

Posted on

Planting Flowers with No Adjacent Restrictions

Gardening can be a delightful pastime, but it comes with its own set of rules and constraints. In the world of programming, we sometimes encounter similar challenges, such as the "Planting Flowers with No Adjacent Restrictions" problem. In this blog post, we'll explore this problem and discover an efficient solution using the greedy algorithm approach.

The Problem

Imagine you have a long flowerbed with some plots where flowers are already planted (denoted by 1) and some empty plots (denoted by 0). However, there's a catch: flowers cannot be planted in adjacent plots. You're given a binary array flowerbed representing the flowerbed's current status, where 0 indicates an empty plot and 1 indicates a planted flower. You also have an integer n, representing the number of new flowers you want to plant.

The task is to determine if it's possible to plant n new flowers in the flowerbed without violating the no-adjacent-flowers rule.

The Approach

To solve this problem efficiently, we'll use a greedy algorithm approach. The idea is to iterate through the flowerbed and check each empty plot. If a plot is empty and the adjacent plots (if they exist) are also empty, we can plant a flower in that plot. We'll keep track of the number of flowers planted and return true if we successfully plant n flowers.

Here's a step-by-step approach:

  1. Initialize a variable count to 0 to keep track of the number of flowers planted.

  2. Iterate through the flowerbed array from left to right.

  3. For each empty plot (0), check if the previous and next plots (if they exist) are also empty. If so, plant a flower (set the plot to 1) and increment the count by 1.

  4. Continue this process until we reach the end of the flowerbed or plant n flowers.

  5. After the loop, check if the count is equal to n. If it is, return true, indicating that we successfully planted n flowers without violating the adjacent flower rule. Otherwise, return false.

The Code

Here's the Go code implementing the described approach:

func canPlaceFlowers(flowerbed []int, n int) bool {
    count := 0
    i := 0
    for i < len(flowerbed) {
        if flowerbed[i] == 0 {
            // Check if previous and next plots are empty (or out of bounds)
            prev := i == 0 || flowerbed[i-1] == 0
            next := i == len(flowerbed)-1 || flowerbed[i+1] == 0
            if prev && next {
                flowerbed[i] = 1
                count++
            }
        }
        i++
    }
    return count >= n
}
Enter fullscreen mode Exit fullscreen mode

Example Usage

Let's see how to use the canPlaceFlowers function with some examples:

fmt.Println(canPlaceFlowers([]int{1, 0, 0, 0, 1}, 1)) // Output: true
fmt.Println(canPlaceFlowers([]int{1, 0, 0, 0, 1}, 2)) // Output: false
Enter fullscreen mode Exit fullscreen mode

Conclusion

The "Planting Flowers with No Adjacent Restrictions" problem challenges us to find an efficient way to plant flowers in a flowerbed while adhering to the rule that no two flowers can be adjacent. By applying the greedy algorithm approach, we can iteratively check each plot and decide whether to plant a flower, ultimately determining if it's possible to plant the desired number of flowers.

This problem-solving technique can be applied to various real-world scenarios where we need to make decisions based on local conditions and constraints.

Top comments (0)