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:

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

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.

思考

假设一朵花都没有种,下表为的位置个数与对应可种的花的数量:

位置数zero012345678
可种花数量flower011223344

由上表可以看出 flower=(zero+1)/2 (其中/为向下取整)

但是,如果前面或者后面有1,则不应该这么算。
1. 只有前面有1或者只有后面有1: flower=zero1+1/2 减去1旁边的0,因为两朵花不能相邻。
2. 前后都有1: flower=(zero2+1)/2 减去旁边的2个0。

答案

c++

class Solution {
public:
    bool canPlaceFlowers(vector<int>& flowerbed, int n) {
    if ((n > flowerbed.size() + 1) / 2) return false;
    int zero = 0, flower = 0;
    bool ones = false;
    for (int i = 0; i < flowerbed.size(); i++) {
      if (i != flowerbed.size() - 1 && flowerbed[i] == 0) {
        zero += 1;
      }
      else {
        if (i == flowerbed.size() - 1 && flowerbed[i] == 0) {
          zero += 2;
        }
        if (!ones) {
          zero++;
          ones = true;
        }
        flower += (zero - 1) / 2;
        zero = 0;
      }
    }
    if (n <= flower) return true;
    return false;
  }
};

// 0 1 2 3 4 5 6 7 8
// 0 1 1 2 2 3 3 4 4
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值