java数据结构与算法刷题目录(剑指Offer、LeetCode、ACM)-----主目录-----持续更新(进不去说明我没写完):https://blog.youkuaiyun.com/grd_java/article/details/123063846 |
---|
文章目录
贪心思想
解题思路:时间复杂度O( n n n),空间复杂度O( 1 1 1) |
---|
- 贪心的思想,从左到右遍历
- 只要当前位置可以种花,就一定要种,这样才能尽可能多种
- 如果当前位置有花,则后面一个位置不可以种,只能考虑后面第二个位置
- 如果当前位置没有花
- 当前位置是最后一个位置,则当前位置可种
- 当前位置不是最后一个,则需要考虑后面位置是否有花,如果没有,当前位置可种
- 如果当前位置没花,但是后面一个位置有花,则下一个可以考虑的位置是后面第3个位置
代码 |
---|
class Solution {
public boolean canPlaceFlowers(int[] flowerbed, int n) {
int index = 0, len = flowerbed.length;
while(index < len && n > 0){//如果还有位置,并且还有花没有种就继续遍历
if(flowerbed[index] == 1) index+=2;//如果当前位置有花,下一个可考虑位置是后面第二个位置
//如果当前位置没有花,且当前位置是最后一个位置,则当前位置可种,或者不是最后一个位置,下一个位置为0,则当前位置可以种花
else if(index == len-1 || flowerbed[index+1] == 0){
n--;
index+=2;//种花后,下一个可种位置为后面第二个
}else index+=3;//如果当前位置的后面有花,则当前位置不能种,下一个可考虑位置是后面第3个位置
}
return n <= 0;
}
}