数组: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》数学归纳法看一下:
中间空位置数 | 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.种花问题相关推荐
- 【贪心】605. 种花问题
605. 种花问题 难度简单381 假设有一个很长的花坛,一部分地块种植了花,另一部分却没有.可是,花不能种植在相邻的地块上,它们会争夺水源,两者都会死去. 给你一个整数数组 flowerbed 表 ...
- 605. 种花问题(贪心算法)
605. 种花问题 题目描述: 假设有一个很长的花坛,一部分地块种植了花,另一部分却没有.可是,花不能种植在相邻的地块上,它们会争夺水源,两者都会死去. 给你一个整数数组 flowerbed 表示花 ...
- 通俗易懂:贪心算法(三):习题练习 (力扣605种花问题、122买卖股票的最佳时机)
看完本文,可以顺便解决leetcode以下两个题目: 605.种花问题
- 605. 种花问题003(贪心算法+思路+详解)
一:题目 假设有一个很长的花坛,一部分地块种植了花,另一部分却没有.可是,花不能种植在相邻的地块上,它们会争夺水源,两者都会死去. 给你一个整数数组 flowerbed 表示花坛,由若干 0 和 1 ...
- leetcode 605. 种花问题(贪心算法)
假设你有一个很长的花坛,一部分地块种植了花,另一部分却没有.可是,花卉不能种植在相邻的地块上,它们会争夺水源,两者都会死去. 给定一个花坛(表示为一个数组包含0和1,其中0表示没种植花,1表示种植了花 ...
- LeetCode 605. 种花问题
1. 题目 假设你有一个很长的花坛,一部分地块种植了花,另一部分却没有.可是,花卉不能种植在相邻的地块上,它们会争夺水源,两者都会死去. 给定一个花坛(表示为一个数组包含0和1,其中0表示没种植花,1 ...
- leetcode 605 种花问题 (c++和python)
目录 题目 思路 c++ python 题目 假设有一个很长的花坛,一部分地块种植了花,另一部分却没有.可是,花不能种植在相邻的地块上,它们会争夺水源,两者都会死去. 给你一个整数数组 flower ...
- 力扣 leetcode 605. 种花问题 (python)
Topic 假设有一个很长的花坛,一部分地块种植了花,另一部分却没有.可是,花不能种植在相邻的地块上,它们会争夺水源,两者都会死去. 给你一个整数数组 flowerbed 表示花坛,由若干 0 和 1 ...
- LeetCode——605.种花问题
一.题目 假设你有一个很长的花坛,一部分地块种植了花,另一部分却没有.可是,花卉不能种植在相邻的地块上,它们会争夺水源,两者都会死去. 给定一个花坛(表示为一个数组包含0和1,其中0表示没种植花,1表 ...
最新文章
- P5357 【模板】AC自动机(二次加强版)(AC自动机建fail树dfs求模式串出现次数)
- python多个异常处理_python中处理多个异常
- 第3章 Python 数字图像处理(DIP) - 灰度变换与空间滤波11 - 直方图处理 - 使用直方图统计量增强图像
- PCB 机器学习(ML.NET)初体验实现PCB加投率预测
- python读取视频流做人脸识别_基于 Python + OpenCV 进行人脸识别,视频追踪代码全注释...
- 分页的limit_Presto分页功能概述
- python 分布式存储_Amazon S3 分布式存储的 python 接口实现
- form表单ajax上传文件
- macos复制粘贴快捷键 快速_苹果电脑复制粘贴快捷键是什么 如何操作【图文】...
- python爬取本地文本中的成语_Python爬取成语:从3字到12字
- 使用Unison同步服务器目录
- iOS wifi认证
- 无线分组网关系统解决方案(GGSN、PDSN)
- ibm最早的个人计算机,个人计算机竞争者分析:IBM.pdf
- 一个完善的ActiveX Web控件教程
- python城市经纬度网格_Python3爬虫 利用百度地图api得到城市经纬度
- 电子版微积分,知识共享,数学真知传四方
- 北航计算机组成实验project4,北航fpga实验的报告.docx
- 开源软件和开源社区的反思
- Java实现 蓝桥杯VIP 算法提高 贪吃的大嘴
热门文章
- Keil编译警告汇总(持续更新。。。)
- 分享 | 快递鸟电子面单API参数接口
- linux 重新运行命令,如何在Linux中重新运行最后执行的命令?
- upnp 二级路由_下载宝作为二级路由折腾记-小白篇 - Padavan - 恩山无线论坛 - Powered by Discuz!...
- [完全免费] 在线UML Class Diagram 类图工具 - 教程第1部分
- Webstrom取消下划线
- 《绝地求生》玩家排名预--1.介绍
- 运行多个mysql service_同时运行多个MySQL服务器的方法
- php 验证 繁体,验证码上中文字是繁体
- html鼠标特效怎么设置到桌面,用CSS实现鼠标单击特效