zoukankan      html  css  js  c++  java
  • (leetcode题解)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.

    这道题采用贪心算法,满足连续三个零就是一个符合点,一次遍历即可,首尾的边界问题(只需要两个连续零)不能忽略。 

    C++实现如下:

    bool canPlaceFlowers(vector<int>& flowerbed, int n) {
            int length=flowerbed.size();
            int count=0;
            for(int i=0;i<length;)
            {
                while(flowerbed[i]==0)
                {
                    i++;
                    if((i==length-1||i==1)&&flowerbed[i]==0)    
                        count++;
                    else if(i<length-1&&flowerbed[i]==0&&flowerbed[++i]==0)
                        count++;
                }
                i++;
                if(n<=count)
                    return true; 
            }
            return false;
        }
  • 相关阅读:
    经典入门_排序
    经典入门_贪心算法
    经典入门_Hash的应用
    经典入门_排序
    uva 839
    uva 327
    uva 699
    uva 712
    uva 297
    uva 548
  • 原文地址:https://www.cnblogs.com/kiplove/p/6964806.html
Copyright © 2011-2022 走看看