leetcode 算法题605 (简单155) 种花问题

leetcode 算法题605 (简单155) 种花问题

  • 题目介绍
假设你有一个很长的花坛,
一部分地块种植了花,
另一部分却没有。
可是,花卉不能种植在相邻的地块上,它
们会争夺水源,
两者都会死去。
给定一个花坛
(表示为一个数组包含0和1,
其中0表示没种植花,
1表示种植了花),
和一个数 n 。
能否在不打破种植规则的情况下种入 n 朵花?
能则返回True,不能则返回False。
  • 示例

输入: flowerbed = [1,0,0,0,1], n = 1
输出: True

输入: flowerbed = [1,0,0,0,1], n = 2
输出: False

  • 注意

数组内已种好的花不会违反种植规则。
输入的数组长度范围为 [1, 20000]。
n 是非负整数,且不会超过输入数组的大小。

  • 解法一
/**
 * @param {number[]} flowerbed
 * @param {number} n
 * @return {boolean}
 */
var canPlaceFlowers = function(flowerbed, n) {
  let i = 1, count = 0;
  if(flowerbed.length === 1) {
    if(flowerbed[0] === 0) {
      count++;
    }
  }
  if(flowerbed[1] === 0 && flowerbed[0] === 0) {
    count++;
    flowerbed[0] = 1;
  }
  console.log(flowerbed)
  if(flowerbed[flowerbed.length - 1] === 0 && flowerbed[flowerbed.length - 2] === 0) {
    count++;
    flowerbed[flowerbed.length - 1] = 1;
  }
  while(i < flowerbed.length - 1) {
    if(flowerbed[i] === 0) {
      if(flowerbed[i - 1] === 0 && flowerbed[i + 1] === 0) {
        count++;
        flowerbed[i] = 1;
      }
    }
    i++;
  }
  return count >= n;
};


执行用时 : 92 ms, 在所有 JavaScript 提交中击败了81.13%的用户

内存消耗 : 38.3 MB, 在所有 JavaScript 提交中击败了6.10%的用户

  • 解法二

/**
 * @param {number[]} flowerbed
 * @param {number} n
 * @return {boolean}
 */
var canPlaceFlowers = function(flowerbed, n) {
  let i = 1, count = 0;
  if(flowerbed.length === 1) {
    if(flowerbed[0] === 0) {
      count++;
    }
    return n <= count;
  }
  if(flowerbed[1] === 0 && flowerbed[0] === 0) {
    n--;
    flowerbed[0] = 1;
  }
  if(flowerbed[flowerbed.length - 1] === 0 && flowerbed[flowerbed.length - 2] === 0) {
    n--;
    flowerbed[flowerbed.length - 1] = 1;
  }
  if(n <= 0) {
    return true;
  }
  while(i < flowerbed.length - 1) {
    if(flowerbed[i] === 0) {
      if(flowerbed[i - 1] === 0 && flowerbed[i + 1] === 0) {
        n--;
        if(n === 0) {
          return true;
        }
        flowerbed[i] = 1;
      }
    }
    i++;
  }
  return false;
};

执行用时 : 80 ms, 在所有 JavaScript 提交中击败了99.01%的用户

内存消耗 : 35.8 MB, 在所有 JavaScript 提交中击败了91.76%的用户

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值