• LeetCode 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.

    题目标签:Array

      题目给了我们一个 flowerbed array, 和一个 n, 让我们找出是否右足够的空间来置放 n 个花。 每一朵符合条件的花,它的左右相邻位置 不能有花。

      所以我们要遍历flowerbed array:

        如果遇到0的话,还要检查这个0的左右两边是否都是0,都是0的情况下,才可以算作一个空间来置放花,然后可以额外跳过右边的0;

        如果遇到1的话,只需要额外跳过1右边的位置;

        一旦当空间数量 已经 等于 n 了,就不需要继续找下去了,直接返回true。(这里要加一个 = ,因为给的 n 有可能是 0)

      当遍历完了,说明空间不够,返回 false 即可。

    Java Solution:

    Runtime beats 60.45% 

    完成日期:10/15/2017

    关键词:Array

    关键点:符合条件的empty spot 的 左右邻居也要为0

     1 class Solution 
     2 {
     3     public boolean canPlaceFlowers(int[] flowerbed, int n) 
     4     {
     5         int count = 0; // count the valid empty spot
     6         
     7         for(int i=0; i<flowerbed.length; i++)
     8         {
     9 
    10             if(flowerbed[i] == 0) // if find empty spot, check its adjacent spots
    11             {
    12                 if(i-1 >= 0 && flowerbed[i-1] == 1) // check left adjacent spot
    13                     continue;
    14                 if(i+1 < flowerbed.length && flowerbed[i+1] == 1) // check right adjacent spot
    15                     continue;
    16                 
    17                 // if come here, meaning this 0 is valid spot to place flower
    18                 count++;
    19                 i++; // skip next 0
    20             }
    21             else if(flowerbed[i] == 1) // if find a flower spot, its next spot is not valid, skip it
    22             {
    23                 i++;
    24             }
    25             
    26             
    27             if(count >= n) // if there are enough spots to place flower, no need to continue
    28                 return true;
    29             
    30         }
    31         
    32         return false;
    33     }
    34 }

    参考资料:N/A

    LeetCode 题目列表 - LeetCode Questions List

  • 相关阅读:
    linux截图工具
    Git理论知识补充
    Git基本操作(add,commit的理解)
    VS2017 error CS0234: 命名空间“Microsoft”中不存在类型或命名空间名“Office”问题的一种解决方案
    MFC CFileDialog DoModal()无法弹出窗口,直接返回IDCANCEL
    VS2015 、VS2017 MFC输出日志到控制台窗口
    win10 VMware 关闭虚拟机失败导致再打开时显示连接不上虚拟机的一种解决方法
    c语言之位段
    Adobe Acrobat DC 制作多级书签
    MFC基于对画框工程笔记->更改窗口图标以及生成的.exe图标
  • 原文地址:https://www.cnblogs.com/jimmycheng/p/7675373.html
Copyright © 2020-2023  润新知