贪心算法:区间问题
只是记录自己的刷题过程,答案参考过多种题解。如有错误感谢指正!
参考:LeetCode 101: A LeetCode Grinding Guide (C++ Version) 作者:高畅 Chang Gao
605.种花问题 (Easy)
-
局部贪心体现在,两两比较,一个种花,一个不种花。
-
全局贪心体现在,遍历比较完后,不存在相邻的两朵花。
-
两两比较的前提条件是 当前下标未种花 ,依据条件是 相邻的下标未种花。
-
①当前下标 i 已种花,则 跳过 相邻的 (i+1),直接判断 (i+2)是否种花;
-
②当前未种花,且下一个也没种花,则给当前位置种;
-
③当前未种花,但下一个已种花,则直接判断下一个。
-
public boolean canPlaceFlowers(int[] flowerbed, int n) {
for (int i = 0; i < flowerbed.length; i += 2) { // 如果当前种花了,直接跳过下一个。
if (flowerbed[i] == 0) {
if (i == flowerbed.length - 1 || flowerbed[i + 1] == 0) {
n--;
} else {
i++;
}
}
}
return n <= 0;
}