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. 种花问题(贪心算法)相关推荐

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

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

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

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

  3. 跳格子/贪心算法例题详解:LeetCode605.种花问题

    今天做了一道很有意思的题目,虽然是分属于贪心算法的一个题目,但是解法多样,十分有趣,且不是很难理解,所以想在这里分享给大家. 题目描述: 假设有一个很长的花坛,一部分地块种植了花,另一部分却没有.可是 ...

  4. c语言贪心算法合并箭,LeetCode刷题题库:贪心算法

    LeetCode刷题笔记:贪心算法 自大学开始,我便陆陆续续的学习一些 算法和数据结构 方面的内容,同时也开始在一些平台刷题,也会参加一些大大小小的算法竞赛.但是平时刷题缺少目的性.系统性,最终导致算 ...

  5. 贪心算法(leetcode分类解题,C++代码详细注释)

    贪心算法 前言 455.分发饼干 135.分发糖果 435.无重叠区间 605.种花问题 452.用最小数量的箭引爆气球 763.划分字母区间 122. 买卖股票的最佳时机 II 376. 摆动序列 ...

  6. LeetCode力扣刷题——简单易懂的贪心算法

    贪心 一.算法解释 采用贪心的策略,保证每次操作都是局部最优的,从而使最后得到的结果是全局最优的. 贪心算法问题需要满足的条件: (1)最优子结构:规模较大的问题的解由规模较小的子问题的解组成,规模较 ...

  7. LeetCode笔试刷题一. 贪心算法

    一.算法解释 贪心算法或贪心思想采用贪心的策略,保证每次操作都是局部最优的,从而使最后得到的结果是全局最优的. 二.题型 2.1 分配问题 455. 分发饼干 饥饿度最小的最容易吃饱,将饥饿度从小到大 ...

  8. leetcode贪心算法题集锦(持续更新中)

    leetcode贪心算法题集锦 leetcode贪心算法题集锦(持续更新中).python 和C++编写. 文章目录 leetcode贪心算法题集锦 一.贪心算法 1.盛最多水的容器 2.买股票的最佳 ...

  9. Leetcode刷题:贪心算法

    文章目录 一.算法思想 二.分配问题 2.1 Leetcode 455 2.1.1 题目描述 2.1.2 输入输出格式 2.1.3求解思路 2.1.4 代码示例(C++) 2.2 Leetcode 1 ...

最新文章

  1. asp.net 页面全生命周期
  2. 数智化转型人才“大考”,综合人才成为企业“基础设施”
  3. 元对象我所理解的设计模式(C++实现)——享元模式(Flyweight Pattern)
  4. mysql 大写 小写_MySQL大小写问题
  5. 人物志 | KDD Cup 2017双料冠军燕鹏
  6. Linux下文件内容查阅命令
  7. OpenCV-通道合并cv::merge
  8. iOS开发1小时快速入门
  9. 植物大战僵尸实训记录
  10. u盘稳定测试软件,u盘检测工具最新版
  11. ucserver admin.php,Discuz!X3.2 升级后ucenter、uc_server正确密码却无法登录后台的解决方法...
  12. 淘宝 喵铺脚本自动签到脚本
  13. svchost.exe是什么进程
  14. 20189220 余超《Linux内核原理与分析》第九周作业
  15. Future.get()抛出ExecutionException或InterruptedException?
  16. 什么是美国次贷危机,看后你就明白了
  17. 读万卷书,写万行代码
  18. 织女星开发板不能调试
  19. 数据库原理及应用与实践 SQL Sever 笔记
  20. 《LeetCode刷题》804. 唯一摩尔斯密码词(java篇)

热门文章

  1. tizi服务器系统,供应TiZi霆智硬件-ERP*服务器
  2. MYSQL查询大于创建时间一小时的数据
  3. 信息学奥赛c++ 回文字符串 正解
  4. 人均年薪70万!华为项目经理具备了哪些能力?
  5. 包教包会:龙芯3A5000上尝试运行任意Windows软件
  6. [CODEVS1537] 血色先锋队 - BFS
  7. 用Python做PAT甲级1001-A+B Format
  8. PAT-Advanced
  9. PMO对项目需求调研的要求(含业务蓝图)
  10. win10禁止dpi缩放在哪_Windows 10,如何禁用应用程序缩放?