题目描述:

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

给你一个整数数组  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》数学归纳法看一下:

中间空位置数 1~2 3~4 5~6 ....... i~i+1
种花个数 0 2 3 ....... (i+1)/2

假设下标i和下标j都有种上花,中间是没种花的区间,即j-i-1>=3才能种树 j-i>=4
可以种花的位置个数:p=j-i-1-2=j-i-3 
当p为奇数:可以种花的个数p+1/2 偶数 :p/2 or p+1/2   总之写成 p+1/2=j-i-3+1/2=j-i-2/2
2》头;假设下标i是第一次检测到有花的下标,当i-0=i个空位置

可以种花的位置为p=i-1 p>=1 i>=2才可以插一个 
数学归纳法:p

可以种花的位置数p 1~2 3~4 5~6 ......... k~k+1
种花的个数 1 2 3 ......... (k+1)/2

当p为奇数:可以种树的个数p+1/2 偶数 :p/2 or p+1/2   总之写成 p+1/2=i-1+1/2=i/2
3》尾
假设j是最后一次检测到花的下标,后面一直到数组尾都是空的,空位置数:(数组长度为len)len-1-j
可以种树的位置为p=len-j-2 p>=1才可以插一个
当p为奇数:可以种树的个数p+1/2 偶数 :p/2 or p+1/2   总之写成 p+1/2=len-j-1/2
4》没有花 可以种len+1/2 朵花

class Solution {
public:bool canPlaceFlowers(vector<int>& flowerbed, int n) {int pre = -1;//代表小段种第一个有树的位置,初始化为-1int  num = 0;//用于存数组中能种花的个数,初始为零for (int i = 0; i < flowerbed.size(); i++) {if (pre == -1 && flowerbed[i] == 1) //头{pre = i;num += i / 2;//cout <<"1." << num << endl;}else if (flowerbed[i] == 1) //中间{num += (i - pre - 2 )/ 2;pre = i;//cout << "11." << num << endl;}}if (pre == -1) //空{num += (flowerbed.size() + 1) / 2;cout << "2." << num << endl;}else//尾{num+= (flowerbed.size() -pre-1)/ 2;//cout << "3." << num << endl;}return num >=n ? true : false;}
};

数组:605.种花问题相关推荐

  1. 【贪心】605. 种花问题

    605. 种花问题 难度简单381 假设有一个很长的花坛,一部分地块种植了花,另一部分却没有.可是,花不能种植在相邻的地块上,它们会争夺水源,两者都会死去. 给你一个整数数组  flowerbed 表 ...

  2. 605. 种花问题(贪心算法)

    605. 种花问题 题目描述: 假设有一个很长的花坛,一部分地块种植了花,另一部分却没有.可是,花不能种植在相邻的地块上,它们会争夺水源,两者都会死去. 给你一个整数数组  flowerbed 表示花 ...

  3. 通俗易懂:贪心算法(三):习题练习 (力扣605种花问题、122买卖股票的最佳时机)

    看完本文,可以顺便解决leetcode以下两个题目: 605.种花问题

  4. 605. 种花问题003(贪心算法+思路+详解)

    一:题目 假设有一个很长的花坛,一部分地块种植了花,另一部分却没有.可是,花不能种植在相邻的地块上,它们会争夺水源,两者都会死去. 给你一个整数数组 flowerbed 表示花坛,由若干 0 和 1 ...

  5. leetcode 605. 种花问题(贪心算法)

    假设你有一个很长的花坛,一部分地块种植了花,另一部分却没有.可是,花卉不能种植在相邻的地块上,它们会争夺水源,两者都会死去. 给定一个花坛(表示为一个数组包含0和1,其中0表示没种植花,1表示种植了花 ...

  6. LeetCode 605. 种花问题

    1. 题目 假设你有一个很长的花坛,一部分地块种植了花,另一部分却没有.可是,花卉不能种植在相邻的地块上,它们会争夺水源,两者都会死去. 给定一个花坛(表示为一个数组包含0和1,其中0表示没种植花,1 ...

  7. leetcode 605 种花问题 (c++和python)

    目录 题目 思路 c++ python 题目 假设有一个很长的花坛,一部分地块种植了花,另一部分却没有.可是,花不能种植在相邻的地块上,它们会争夺水源,两者都会死去. 给你一个整数数组  flower ...

  8. 力扣 leetcode 605. 种花问题 (python)

    Topic 假设有一个很长的花坛,一部分地块种植了花,另一部分却没有.可是,花不能种植在相邻的地块上,它们会争夺水源,两者都会死去. 给你一个整数数组 flowerbed 表示花坛,由若干 0 和 1 ...

  9. LeetCode——605.种花问题

    一.题目 假设你有一个很长的花坛,一部分地块种植了花,另一部分却没有.可是,花卉不能种植在相邻的地块上,它们会争夺水源,两者都会死去. 给定一个花坛(表示为一个数组包含0和1,其中0表示没种植花,1表 ...

最新文章

  1. P5357 【模板】AC自动机(二次加强版)(AC自动机建fail树dfs求模式串出现次数)
  2. python多个异常处理_python中处理多个异常
  3. 第3章 Python 数字图像处理(DIP) - 灰度变换与空间滤波11 - 直方图处理 - 使用直方图统计量增强图像
  4. PCB 机器学习(ML.NET)初体验实现PCB加投率预测
  5. python读取视频流做人脸识别_基于 Python + OpenCV 进行人脸识别,视频追踪代码全注释...
  6. 分页的limit_Presto分页功能概述
  7. python 分布式存储_Amazon S3 分布式存储的 python 接口实现
  8. form表单ajax上传文件
  9. macos复制粘贴快捷键 快速_苹果电脑复制粘贴快捷键是什么 如何操作【图文】...
  10. python爬取本地文本中的成语_Python爬取成语:从3字到12字
  11. 使用Unison同步服务器目录
  12. iOS wifi认证
  13. 无线分组网关系统解决方案(GGSN、PDSN)
  14. ibm最早的个人计算机,个人计算机竞争者分析:IBM.pdf
  15. 一个完善的ActiveX Web控件教程
  16. python城市经纬度网格_Python3爬虫 利用百度地图api得到城市经纬度
  17. 电子版微积分,知识共享,数学真知传四方
  18. 北航计算机组成实验project4,北航fpga实验的报告.docx
  19. 开源软件和开源社区的反思
  20. Java实现 蓝桥杯VIP 算法提高 贪吃的大嘴

热门文章

  1. Keil编译警告汇总(持续更新。。。)
  2. 分享 | 快递鸟电子面单API参数接口
  3. linux 重新运行命令,如何在Linux中重新运行最后执行的命令?
  4. upnp 二级路由_下载宝作为二级路由折腾记-小白篇 - Padavan - 恩山无线论坛 - Powered by Discuz!...
  5. [完全免费] 在线UML Class Diagram 类图工具 - 教程第1部分
  6. Webstrom取消下划线
  7. 《绝地求生》玩家排名预--1.介绍
  8. 运行多个mysql service_同时运行多个MySQL服务器的方法
  9. php 验证 繁体,验证码上中文字是繁体
  10. html鼠标特效怎么设置到桌面,用CSS实现鼠标单击特效