• 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

    含义:这道题给了我们一个01数组,其中1表示已经放了花,0表示可以放花的位置,但是有个限制条件是不能有相邻的花。为给定的n朵花能否放置完毕

    解法1
     1     public boolean canPlaceFlowers(int[] flowerbed, int n) {
     2         int count = 0;
     3         for(int i = 0; i < flowerbed.length && count < n; i++) {
     4             if(flowerbed[i] == 0) {
     5          //get next and prev flower bed slot values. If i lies at the ends the next and prev are considered as 0. 
     6                int next = (i == flowerbed.length - 1) ? 0 : flowerbed[i + 1]; 
     7                int prev = (i == 0) ? 0 : flowerbed[i - 1];
     8                if(next == 0 && prev == 0) {
     9                    flowerbed[i] = 1;
    10                    count++;
    11                }
    12             }
    13         }
    14         
    15         return count == n;
    16     }

    解法2

     1        if (n == 0) return true;
     2         if (flowerbed.length == 0) return false;
     3         if (flowerbed.length == 1) {
     4             if (flowerbed[0] == 1) {
     5                 return false;
     6             }
     7             return n > 1 ? false : true;
     8         }
     9         if (flowerbed.length == 2) {
    10             if (n == 1) {
    11                 if (flowerbed[0] + flowerbed[1] == 0) return true;
    12                 return false;
    13             }
    14             return false;
    15         }
    16         if (flowerbed[0] + flowerbed[1] == 0) {
    17             flowerbed[0] = 1;
    18             n--;
    19         }
    20         for (int i = 1; i <= flowerbed.length - 2; i++) {
    21             if (flowerbed[i - 1] + flowerbed[i] + flowerbed[i + 1] == 0) {
    22                 flowerbed[i] = 1;
    23                 n--;
    24             }
    25         }
    26 
    27         if (n > 0) {
    28             if (flowerbed[flowerbed.length - 2] + flowerbed[flowerbed.length - 1] == 0) {
    29                 flowerbed[flowerbed.length - 1] = 1;
    30                 n--;
    31             }
    32         }
    33 
    34         return n > 0 ? false : true;
  • 相关阅读:
    Shell编程(一)为什么使用Shell编程
    ALSA驱动Debian声卡
    Shell编程(五)find与grep命令简介及正则表达式
    Shell编程(三)控制结构及函数
    初识Linux程序
    Gentoo的哲学
    学习Emacs
    Shell编程(二)Shell基本语法
    第一杯咖啡在Debian 上安装Java环境
    Fvwm 笔记
  • 原文地址:https://www.cnblogs.com/wzj4858/p/7670253.html
Copyright © 2020-2023  润新知