605. Can Place Flowers

Suppose 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 - they would compete for water and both would die.

Given a flowerbed (represented as an array containing 0 and 1, where 0 means empty and 1 means not empty), and a number n, return if n new flowers can be planted in it without violating the no-adjacent-flowers rule.

Example 1:

Input: flowerbed = [1,0,0,0,1], n = 1
Output: True

Example 2:

Input: flowerbed = [1,0,0,0,1], n = 2
Output: False

Note:

  1. The input array won't violate no-adjacent-flowers rule.
  2. The input array size is in the range of [1, 20000].
  3. n is a non-negative integer which won't exceed the input array size.

这道题的意思是给定一个花圃flowerbed和n盆花,看这n盆花能否被放在花圃中,放置原则是相邻的两个小plots不能都放花,数组中的0代表没种花,1代表种了花,写一个boolean函数,判断给定的花圃能不能放n盆花。开始我分析的时候觉得可以通过判断连续的0的个数来求总共能放的花盆数,再与n相比,后来发现这样的方法根本不行,各种例外情况太多了:如果连续的两个0放在中间,则一盆花也不能放,如果放在开头和末尾则能放置一盆花,然后我写了判断这种情况的,又有其他情况不满足==这注定这个方法不行啊,代码仍放上来==

        //not AC
        int len = flowerbed.length;
        int res = 0;
        int count;
        //int temp=0;
        if(len == 0&&n==0||len==1&&flowerbed[0]==0&&n<=1||len==1&&flowerbed[0]==1&&n==0){return true;}
        if(len == 0&&n!=0||len==1&&flowerbed[0]==1&&n>0){return false;}
        if(flowerbed[0]==0&&flowerbed[1]==0){res++;}
        if(flowerbed[len-2]==0&&flowerbed[len-1]==0){res++;}
        for(int i=0;i<len;i++){
        	
        	if(flowerbed[i]==0){
        		count = 1;
                for( int j=i+1;j<len;j++){
                	if(flowerbed[j]==0){count++;}
                	else{
                		i = j;
                		break;
                		}
                }
            //if(flowerbed[0]==0&&flowerbed[1]==0||flowerbed[len-2]==0&&flowerbed[len-1]==0){res++;}   
            if(count%2==0){res = res+(count-2)/2;}
            else {res = res+(count-1)/2;}
        	}
        	
        	
        }
        return res>=n;
so,参考了别人写的,很容易理解,就不解释了,代码如下:

int count=0;
    	for(int i=0;i<flowerbed.length;i++){
    		if(i==0||flowerbed[i-1]==0&&flowerbed[i]==0&&i+1==flowerbed.length||flowerbed[i+1]==0){
    			flowerbed[i]=1;
    			count++;
    		}
    	}
    	return count>=n;



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值