Can Place Flowers

// https://leetcode.com/problems/can-place-flowers/

// 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.

// Ex1:
// Input: flowerbed = [1, 0, 0, 0, 1], n = 1
// Output : true

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

#include <vector>
#include <iostream>

using namespace std;

// Time: O(n), Space: O(1)
bool canPlaceFlower(vector<int>& flowerbed, int n) {
    if (flowerbed.empty()) {
        return n == 0;
    }

    int capacity = 0;
    int s = flowerbed.size();
    for (int i = 0; i < s; i++) {
        if (flowerbed[i] == 0) {
            if ((i-1 < 0 || flowerbed[i-1] == 0) &&
                (i+1 >= s || flowerbed[i+1] == 0)) {
                capacity++;
                flowerbed[i] = 1;
            }
        }
    }

    return capacity >= n;
}

int main() {
    // 0 0 0 0 0
    vector<int> f1 {0, 0};
    cout << canPlaceFlower(f1, 1) << endl; // true

    vector<int> f2 {1, 0, 0, 0, 1};
    cout << canPlaceFlower(f2, 2) << endl; // false

    vector<int> f3 {0, 0, 1, 0, 1};
    cout << canPlaceFlower(f3, 1) << endl; // true

    vector<int> f4{ 0, 0, 0, 0, 0 };
    cout << canPlaceFlower(f4, 3) << endl; // true

    vector<int> f5{ 1, 0, 0, 0, 0 };
    cout << canPlaceFlower(f5, 3) << endl; // false;

    vector<int> f6{1, 0, 0, 0, 0, 1};
    cout << canPlaceFlower(f6, 2) << endl; // false
    return 0;
}```

Last updated