题目:605.种花问题

题目来源:

        leetcode题目,网址:605. 种花问题 - 力扣(LeetCode)

解题思路:

        花坛分为完全空的花坛和已经种有花的花坛两种情况,对于前者,直接判断花坛大于等于花坛可种地块数与 2 的商与 n 的大小即可。对于后者,需要对空置地块所在位置分情况讨论。若所种地块左侧或者右侧无花,则可种花数量直接加上空地数整除 2 的结果即可;若所在地块左侧或右侧都有花,则可种花数量需要加上空地数与 1 的差 整除 2 的结果。最后将可种花数量与 n 比较即可。

解题代码:

class Solution {
    public boolean canPlaceFlowers(int[] flowerbed, int n) {
        int max=0;
        int countZero=0;
        int i=0;
        while(i<flowerbed.length && flowerbed[i]==0  ){     //最左边的空白花坛,只有一边有花
            countZero++;
            i++;
        }
        if(i==flowerbed.length){ //花坛中一朵花都没有
            countZero= (countZero%2==0? countZero:countZero+1);
            max=countZero/2;
            return max>=n? true:false;
        }
        max+=((countZero)/2);
        countZero=0;
        //位于中间的花坛,两边都有花
        while(i<flowerbed.length){  
            if(flowerbed[i]==0){
                countZero++;
            }else{
                max+=(countZero-1)/2;
                countZero=0;
            }
            i++;
        }
        max+=(countZero)/2; //最右边的空白花坛,只有一边有花
        return max>=n?true:false;
    }
}
 

总结:

        注意花坛中可能一朵花都没有即可。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值