j

jaryue

V1

2023/04/21阅读:17主题:默认主题

leetcode 605. 种花问题

leetcode 605. 种花问题.


题目描述

  1. 种花问题

假设有一个很长的花坛,一部分地块种植了花,另一部分却没有。可是,花不能种植在相邻的地块上,它们会争夺水源,两者都会死去。

给你一个整数数组 flowerbed 表示花坛,由若干 0 和 1 组成,其中 0 表示没种植花,1 表示种植了花。另有一个数 n ,能否在不打破种植规则的情况下种入 n 朵花?能则返回 true ,不能则返回 false 。

示例 1:

输入:flowerbed = [1,0,0,0,1], n = 1 输出:true 示例 2:

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

提示:

1 <= flowerbed.length <= 2 * 104 flowerbed[i] 为 0 或 1 flowerbed 中不存在相邻的两朵花 0 <= n <= flowerbed.length

解题思路

法1

双指针模拟法\

我们假设两朵花之间的空间为n,在这个空间那么可以种花的数量就为n-1/2

在两头可以将空间扩大1,

模拟计算可以种花的总数量

与n再对比得到结果

  • 时间复杂度(O(n))
  • 空间复杂度(O(1))

执行结果

法1

func canPlaceFlowers(flowerbed []int, n int) bool {
 t := 0
 for i, j := 01; j < len(flowerbed) && i < len(flowerbed); i++ {
  for j = i; j < len(flowerbed) && flowerbed[j] == 0; {
   j++
  }
  if i == 0 {
   t += (j - i) / 2
  } else if j == len(flowerbed)-1 && flowerbed[j] == 0 {
   t += (j - i + 1) / 2
  } else {
   t += (j - i - 1) / 2
  }
  i = j
 }
 return t >= n
}

执行结果: 通过 显示详情 查看示例代码 添加备注

执行用时: 16 ms , 在所有 Go 提交中击败了 52.43% 的用户 内存消耗: 6.1 MB , 在所有 Go 提交中击败了 27.43% 的用户 通过测试用例: 127 / 127

法2


法3


分类:

后端

标签:

后端

作者介绍

j
jaryue
V1