- leet_code:链接
- 问题描述:假定你有一个长的花床,该花床有些栽上花了(用1表示),有些位置没有栽上花(用0表示),要求任意两株花直接不能相邻(否则会因为水分不足死掉,解释的好牵强。。)那么问给定n株花能否全部栽到该花床上?
- 输入输出样例:
-
Input1: flowerbed = [1,0,0,0,1], n = 1
-
Output1: True
-
Input2: flowerbed = [1,0,0,0,1], n = 2
-
Output2: False
-
- c++ 代码
- 思路:利用贪心思想,对花床从左到右每一个空位均进行能否栽植判断。
- 注意:一定注意两个不同版本在程序执行效率上的差异性!
- c++ V1:
class Solution
{
public:
bool canPlaceFlowers(vector<int>& flowerbed, int n)
{
int count = 0;
for (auto i = 0; i < flowerbed.size() && count < n; i++)
{
int prev = (i == 0) ? 0 : flowerbed[i - 1];
int next = (i == flowerbed.size() - 1) ? 0 : flowerbed[i + 1];
if (flowerbed[i] == 0 && prev == 0 && next == 0)
{
count += 1;
flowerbed[i] = 1;
}
}
cout << count << endl;
return count == n;
}
};
- c++ V2:
class Solution
{
public:
bool canPlaceFlowers(vector<int>& flowerbed, int n)
{
int count = 0;
for (auto i = 0; i < flowerbed.size() && count < n; i++)
{
if (flowerbed[i] == 0)
{
int prev = (i == 0) ? 0 : flowerbed[i - 1];
int next = (i == flowerbed.size() - 1) ? 0 : flowerbed[i + 1];
if (prev == 0 && next == 0)
{
count += 1;
flowerbed[i] = 1;
}
}
}
return count == n;
}
};