605. 种花问题(贪心算法)
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、贪心策略为:尽量能种更多的花,遍历数组,遇到0 0 0组合就可以种花,种花后成0 1 0;
2、0 0 0组合在数组边界存在特殊情况,这里我们用防御式编程思想,在flowerbed数组两端各添加一个0;
3、每种一朵花,就让n--,最后判断n是否小于等于0的真假就可以了。
class Solution {
public:bool canPlaceFlowers(vector<int>& flowerbed, int n) {int len =flowerbed.size();vector<int> v(len+2);v[0]=0; v[len+1]=0; //将首尾赋值为0;for(int i=0;i<len;i++){v[i+1]=flowerbed[i];}for(int i=1;i<len+1;i++){if(v[i]==0 && v[i-1]==0 && v[i+1]==0){n--;v[i]=1;}}return n<=0;}
};
题解2:
思路和解1一样,不过做了一点小优化,介于0 0 0组合在边界的问题,我们还可以这样考虑:
当遍历到下标i是边界的位置时(0或len -1),指明i在边界就可以了,例当下标在0的位置:如果存在flowerbed[0]==0 && flowerbed[1]==0 && i==0,就说明0的位置能种花。同理当在右边界时,指明i==len-1.
综上code为:
class Solution {
public:bool canPlaceFlowers(vector<int>& flowerbed, int n) {int len =flowerbed.size();for(int i=0;i<len;i++){if(flowerbed[i]==0 && (i==0||flowerbed[i-1]==0) && (i==len-1||flowerbed[i+1]==0) ){ //i==0要写在前面先判断,否则数组可能出界n--;flowerbed[i]=1;i++; //每种1棵树,就跳过一个位置}}return n<=0;}
};
注意:i==0那个条件要写在前面先判断,否则数组可能出界,不信的可以试试,是不是又知道了个新知识O(∩_∩)O~
605. 种花问题(贪心算法)相关推荐
- 通俗易懂:贪心算法(三):习题练习 (力扣605种花问题、122买卖股票的最佳时机)
看完本文,可以顺便解决leetcode以下两个题目: 605.种花问题
- 【贪心】605. 种花问题
605. 种花问题 难度简单381 假设有一个很长的花坛,一部分地块种植了花,另一部分却没有.可是,花不能种植在相邻的地块上,它们会争夺水源,两者都会死去. 给你一个整数数组 flowerbed 表 ...
- 跳格子/贪心算法例题详解:LeetCode605.种花问题
今天做了一道很有意思的题目,虽然是分属于贪心算法的一个题目,但是解法多样,十分有趣,且不是很难理解,所以想在这里分享给大家. 题目描述: 假设有一个很长的花坛,一部分地块种植了花,另一部分却没有.可是 ...
- c语言贪心算法合并箭,LeetCode刷题题库:贪心算法
LeetCode刷题笔记:贪心算法 自大学开始,我便陆陆续续的学习一些 算法和数据结构 方面的内容,同时也开始在一些平台刷题,也会参加一些大大小小的算法竞赛.但是平时刷题缺少目的性.系统性,最终导致算 ...
- 贪心算法(leetcode分类解题,C++代码详细注释)
贪心算法 前言 455.分发饼干 135.分发糖果 435.无重叠区间 605.种花问题 452.用最小数量的箭引爆气球 763.划分字母区间 122. 买卖股票的最佳时机 II 376. 摆动序列 ...
- LeetCode力扣刷题——简单易懂的贪心算法
贪心 一.算法解释 采用贪心的策略,保证每次操作都是局部最优的,从而使最后得到的结果是全局最优的. 贪心算法问题需要满足的条件: (1)最优子结构:规模较大的问题的解由规模较小的子问题的解组成,规模较 ...
- LeetCode笔试刷题一. 贪心算法
一.算法解释 贪心算法或贪心思想采用贪心的策略,保证每次操作都是局部最优的,从而使最后得到的结果是全局最优的. 二.题型 2.1 分配问题 455. 分发饼干 饥饿度最小的最容易吃饱,将饥饿度从小到大 ...
- leetcode贪心算法题集锦(持续更新中)
leetcode贪心算法题集锦 leetcode贪心算法题集锦(持续更新中).python 和C++编写. 文章目录 leetcode贪心算法题集锦 一.贪心算法 1.盛最多水的容器 2.买股票的最佳 ...
- Leetcode刷题:贪心算法
文章目录 一.算法思想 二.分配问题 2.1 Leetcode 455 2.1.1 题目描述 2.1.2 输入输出格式 2.1.3求解思路 2.1.4 代码示例(C++) 2.2 Leetcode 1 ...
最新文章
- asp.net 页面全生命周期
- 数智化转型人才“大考”,综合人才成为企业“基础设施”
- 元对象我所理解的设计模式(C++实现)——享元模式(Flyweight Pattern)
- mysql 大写 小写_MySQL大小写问题
- 人物志 | KDD Cup 2017双料冠军燕鹏
- Linux下文件内容查阅命令
- OpenCV-通道合并cv::merge
- iOS开发1小时快速入门
- 植物大战僵尸实训记录
- u盘稳定测试软件,u盘检测工具最新版
- ucserver admin.php,Discuz!X3.2 升级后ucenter、uc_server正确密码却无法登录后台的解决方法...
- 淘宝 喵铺脚本自动签到脚本
- svchost.exe是什么进程
- 20189220 余超《Linux内核原理与分析》第九周作业
- Future.get()抛出ExecutionException或InterruptedException?
- 什么是美国次贷危机,看后你就明白了
- 读万卷书,写万行代码
- 织女星开发板不能调试
- 数据库原理及应用与实践 SQL Sever 笔记
- 《LeetCode刷题》804. 唯一摩尔斯密码词(java篇)