605. 种花问题
假设有一个很长的花坛,一部分地块种植了花,另一部分却没有。可是,花不能种植在相邻的地块上,它们会争夺水源,两者都会死去。
给你一个整数数组 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
原站题解
golang 解法, 执行用时: 12 ms, 内存消耗: 6.1 MB, 提交时间: 2023-09-29 00:13:35
func canPlaceFlowers(flowerbed []int, n int) bool { count := 0 m := len(flowerbed) prev := -1 for i := 0; i < m; i++ { if flowerbed[i] == 1 { if prev < 0 { count += i / 2 } else { count += (i - prev - 2) / 2 } if count >= n { return true } prev = i } } if prev < 0 { count += (m + 1) / 2 } else { count += (m - prev - 1) / 2 } return count >= n }
python3 解法, 执行用时: 48 ms, 内存消耗: 16.2 MB, 提交时间: 2023-09-29 00:13:22
class Solution: def canPlaceFlowers(self, flowerbed: List[int], n: int) -> bool: count, m, prev = 0, len(flowerbed), -1 for i in range(m): if flowerbed[i] == 1: if prev < 0: count += i // 2 else: count += (i - prev - 2) // 2 if count >= n: return True prev = i if prev < 0: count += (m + 1) // 2 else: count += (m - prev - 1) // 2 return count >= n
java 解法, 执行用时: 0 ms, 内存消耗: 42.7 MB, 提交时间: 2023-09-29 00:13:09
class Solution { public boolean canPlaceFlowers(int[] flowerbed, int n) { int count = 0; int m = flowerbed.length; int prev = -1; for (int i = 0; i < m; i++) { if (flowerbed[i] == 1) { if (prev < 0) { count += i / 2; } else { count += (i - prev - 2) / 2; } if (count >= n) { return true; } prev = i; } } if (prev < 0) { count += (m + 1) / 2; } else { count += (m - prev - 1) / 2; } return count >= n; } }
javascript 解法, 执行用时: 60 ms, 内存消耗: 42.8 MB, 提交时间: 2023-09-29 00:12:56
/** * @param {number[]} flowerbed * @param {number} n * @return {boolean} */ var canPlaceFlowers = function(flowerbed, n) { let count = 0; const m = flowerbed.length; let prev = -1; for (let i = 0; i < m; i++) { if (flowerbed[i] === 1) { if (prev < 0) { count += Math.floor(i / 2); } else { count += Math.floor((i - prev - 2) / 2); } if (count >= n) { return true; } prev = i; } } if (prev < 0) { count += (m + 1) / 2; } else { count += (m - prev - 1) / 2; } return count >= n; };
python3 解法, 执行用时: 60 ms, 内存消耗: 16.4 MB, 提交时间: 2023-09-21 23:44:30
class Solution: def canPlaceFlowers(self, flowerbed: List[int], n: int) -> bool: count, m, prev = 0, len(flowerbed), -1 for i in range(m): if flowerbed[i] == 1: if prev < 0: count += i // 2 else: count += (i - prev - 2) // 2 prev = i if prev < 0: count += (m + 1) // 2 else: count += (m - prev - 1) // 2 return count >= n
javascript 解法, 执行用时: 68 ms, 内存消耗: 42.8 MB, 提交时间: 2023-09-21 23:44:15
/** * @param {number[]} flowerbed * @param {number} n * @return {boolean} */ var canPlaceFlowers = function(flowerbed, n) { let count = 0; const m = flowerbed.length; let prev = -1; for (let i = 0; i < m; i++) { if (flowerbed[i] === 1) { if (prev < 0) { count += Math.floor(i / 2); } else { count += Math.floor((i - prev - 2) / 2); } prev = i; } } if (prev < 0) { count += (m + 1) / 2; } else { count += (m - prev - 1) / 2; } return count >= n; };
cpp 解法, 执行用时: 8 ms, 内存消耗: 20.2 MB, 提交时间: 2023-09-21 23:44:02
class Solution { public: bool canPlaceFlowers(vector<int>& flowerbed, int n) { int count = 0; int m = flowerbed.size(); int prev = -1; for (int i = 0; i < m; ++i) { if (flowerbed[i] == 1) { if (prev < 0) { count += i / 2; } else { count += (i - prev - 2) / 2; } prev = i; } } if (prev < 0) { count += (m + 1) / 2; } else { count += (m - prev - 1) / 2; } return count >= n; } };
java 解法, 执行用时: 1 ms, 内存消耗: 42.5 MB, 提交时间: 2023-09-21 23:43:50
class Solution { public boolean canPlaceFlowers(int[] flowerbed, int n) { int count = 0; int m = flowerbed.length; int prev = -1; for (int i = 0; i < m; i++) { if (flowerbed[i] == 1) { if (prev < 0) { count += i / 2; } else { count += (i - prev - 2) / 2; } prev = i; } } if (prev < 0) { count += (m + 1) / 2; } else { count += (m - prev - 1) / 2; } return count >= n; } }
golang 解法, 执行用时: 16 ms, 内存消耗: 6 MB, 提交时间: 2021-06-21 10:19:40
func canPlaceFlowers(flowerbed []int, n int) bool { count := 0 m := len(flowerbed) prev := -1 for i := 0; i < m; i++ { if flowerbed[i] == 1 { if prev < 0 { count += i / 2 } else { count += (i - prev - 2) / 2 } if count >= n { return true } prev = i } } if prev < 0 { // 全部都是0 count += (m + 1) / 2 } else { // 最后还有0 count += (m - prev - 1) / 2 } return count >= n }