【LeetCode】605. Can Place Flowers 解题报告(Python & C++)
2024-09-07 04:58:29
作者: 负雪明烛
id: fuxuemingzhu
个人博客: http://fuxuemingzhu.cn/
题目地址:https://leetcode.com/problems/can-place-flowers/description/
题目描述
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
Note:
- The input array won’t violate no-adjacent-flowers rule.
- The input array size is in the range of [1, 20000].
- n is a non-negative integer which won’t exceed the input array size.
解题方法
贪婪算法
这个题做的方式很蠢,就是一次遍历,看每个位置能不能种花,如果可以就种上,否则就判断下一个节点。
不能种花的条件是:
- 已经有花
- 当
i>0
时,右边有花 - 当
i<len-1
时,左边有花
注意两点:
- 遍历的时候如果该位置能种花,则种上,否则会影响下一个位置的判断;
- 最后的条件是
n<=0
,即能种花的位置比给出的n多。
class Solution(object):
def canPlaceFlowers(self, flowerbed, n):
"""
:type flowerbed: List[int]
:type n: int
:rtype: bool
"""
for i, num in enumerate(flowerbed):
if num == 1: continue
if i > 0 and flowerbed[i - 1] == 1: continue
if i < len(flowerbed) - 1 and flowerbed[i + 1] == 1: continue
flowerbed[i] = 1
n -= 1
return n <= 0
二刷,做法思路一样:有连续的三个0的话,中间的这个位置种上一朵花。
python代码:
class Solution(object):
def canPlaceFlowers(self, flowerbed, n):
"""
:type flowerbed: List[int]
:type n: int
:rtype: bool
"""
flowerbed = [0] + flowerbed + [0]
N = len(flowerbed)
res = 0
for i in range(1, N - 1):
if flowerbed[i - 1] == flowerbed[i] == flowerbed[i + 1] == 0:
res += 1
flowerbed[i] = 1
return res >= n
C++代码如下:
class Solution {
public:
bool canPlaceFlowers(vector<int>& flowerbed, int n) {
flowerbed.insert(flowerbed.begin(), 0);
flowerbed.push_back(0);
int N = flowerbed.size();
int res = 0;
for (int i = 1; i < N - 1; ++i) {
if (flowerbed[i - 1] == 0 && flowerbed[i] == 0 && flowerbed[i + 1] == 0) {
++res;
flowerbed[i] = 1;
}
}
return res >= n;
}
};
日期
2018 年 2 月 4 日
2018 年 11 月 26 日 —— 11月最后一周!
最新文章
- HDU 1166 敌兵布阵(线段树单点更新)
- DevExpress.XtraGrid.GridControl 实现自定义tooltip
- Oracle 身份证校验
- C# 控制台程序实现 Ctrl + V 粘贴功能
- springMVC的一些工具类
- Hash(哈希)
- 小奇模拟赛9.13 by hzwer
- c排序算法大全
- new 运算符
- qml实现窗口拖动
- oracle中 sql%rowcount 使用方法
- QT5.5实现串口通信
- visual studio 配置OpenGL环境
- cmd 进入mysql
- 这丫头也的还真清楚,但是跑不通呢,换3.0.3的mybatis也不行
- less使用ch1--认识语法
- Head First设计模式之单例模式
- Mycat 分片规则详解--自然月分片
- 解释session
- 修改GDAL库支持RPC像方改正模型
热门文章
- SSH客户端工具连接Linux(有的也可以连接Windows、mac、iOS等多系统平台)
- nrf 51802 和 nrf51822 的区别于联系
- nrf51822 RAM不足分析
- Unity——Js和Unity互相调用
- IO流的字节输入输出流(InputStream,OutputStream)
- A Child&#39;s History of England.52
- Express中间件原理详解
- [JAVA]动态代理与AOP的千丝万缕
- navigationItem的leftBarButtonItem和rightBarButtonItem隐藏
- ReactiveCocoa操作方法-秩序