LeetCode算法题-Can Place Flowers(Java实现)
这是悦乐书的第272次更新,第287篇原创
01 看题和准备
今天介绍的是LeetCode算法题中Easy级别的第140题(顺位题号是605)。假设你有一个花坛,其中一些地块是种植的,有些则不是。 然而,花不能种植在相邻的地块,因为它们会争夺水,两者都会死亡。给定一个花坛(表示为包含0和1的数组,其中0表示空,可以种植,1表示不为空,不能种植)和数字n,如果可以在其中种植n个新花而不违反无邻花规则则返回true。例如:
输入:花坛=[1,0,0,0,1],n = 1
输出:true
输入:花坛=[1,0,0,0,1],n = 2
输出:false
注意:
输入数组不会违反无邻花规则。
输入数组大小在[1,20000]范围内。
n是一个非负整数,不会超过输入数组大小。
本次解题使用的开发工具是eclipse,jdk使用的版本是1.8,环境是win7 64位系统,使用Java语言编写和测试。
02 第一种解法
要想种花,即当前地块是可以种植的(值为0),需要满足两个条件:当前地块的前一个地块是可以种植的(值也为0),当前地块的后一个地块也是可以种植的(值也为0),把满足这些条件的地块数加起来,判断与给定的花数量的大小,来返回true或者false。在这里,我们使用三个布尔值来判断,第二个布尔值与第三个布尔值表示了刚刚分析的两种情况,第一个布尔值是初始条件,只有三者都满足,那么我们就可以在当前位置种花。
public boolean canPlaceFlowers(int[] flowerbed, int n) {
int i = 0;
int len = flowerbed.length;
while (i < len) {
boolean b = flowerbed[i] == 0;
boolean b2 = i == 0 || flowerbed[i-1] == 0;
boolean b3 = i == len-1 || flowerbed[i+1] == 0;
if (b && b2 && b3) {
flowerbed[i] = 1;
n--;
}
i++;
}
return n <= 0;
}
03 第二种解法
思路与上面第一种解法类似,只是换个形式实现。我们获取当前位置的前一个位置的值与后一个位置的值,判断他们是不是都等于0,如果等于,n就自减1,如果n小于等于0,表示需要种的花已经种完了,直接返回true。但是,此种写法我们需要判断一下n是否等于0,n等于0表示没有种花,直接返回true。
public boolean canPlaceFlowers2(int[] flowerbed, int n) {
if (n == 0) {
return true;
}
int i = 0;
int len = flowerbed.length;
while (i < len) {
if (flowerbed[i] == 0) {
int next = i == len-1 ? 0 : flowerbed[i+1];
int pre = i == 0 ? 0 : flowerbed[i-1];
if (next == 0 && pre == 0) {
flowerbed[i] = 1;
n--;
}
if (n <= 0) {
return true;
}
}
i++;
}
return false;
}
04 小结
算法专题目前已日更超过四个月,算法题文章140+篇,公众号对话框回复【数据结构与算法】、【算法】、【数据结构】中的任一关键词,获取系列文章合集。
以上就是全部内容,如果大家有什么好的解法思路、建议或者其他问题,可以下方留言交流,点赞、留言、转发就是对我最大的回报和支持!
LeetCode算法题-Can Place Flowers(Java实现)的更多相关文章
- LeetCode算法题-Rotate String(Java实现)
这是悦乐书的第317次更新,第338篇原创 在开始今天的算法题前,说几句,今天是世界读书日,推荐两本书给大家,<终身成长>和<禅与摩托车维修艺术>,值得好好阅读和反复阅读. 0 ...
- LeetCode算法题-Rotated Digits(Java实现)
这是悦乐书的第316次更新,第337篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第185题(顺位题号是788).如果一个数字经过180度旋转后,变成了一个与原数字不同的 ...
- LeetCode算法题-Toeplitz Matrix(Java实现)
这是悦乐书的第312次更新,第333篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第181题(顺位题号是766).如果从左上角到右下角的每个对角线具有相同的元素,则矩阵是 ...
- LeetCode算法题-Flood Fill(Java实现)
这是悦乐书的第306次更新,第325篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第173题(顺位题号是733).图像由二维整数数组表示,每个整数表示图像的像素值(从0到 ...
- LeetCode算法题-Image Smoother(Java实现)
这是悦乐书的第282次更新,第299篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第150题(顺位题号是661).给定表示图像灰度的2D整数矩阵M,您需要设计一个平滑器以 ...
- LeetCode算法题-Design LinkedList(Java实现)
这是悦乐书的第300次更新,第319篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第168题(顺位题号是707).设计链表的实现.您可以选择使用单链表或双链表.单链表中的 ...
- LeetCode算法题-Design HashMap(Java实现)
这是悦乐书的第299次更新,第318篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第167题(顺位题号是706).在不使用任何内置哈希表库的情况下设计HashMap.具体 ...
- LeetCode算法题-Design HashSet(Java实现)
这是悦乐书的第298次更新,第317篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第166题(顺位题号是705).不使用任何内建的hash表库设计一个hash集合,应包含 ...
- LeetCode算法题-Binary Search(Java实现)
这是悦乐书的第297次更新,第316篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第165题(顺位题号是704).给定n个元素的排序(按升序)整数数组nums和目标值,编 ...
随机推荐
- 【Spark篇】---Spark解决数据倾斜问题
一.前述 数据倾斜问题是大数据中的头号问题,所以解决数据清洗尤为重要,本文只针对几个常见的应用场景做些分析 . 二.具体方法 1.使用Hive ETL预处理数据 方案适用场景: 如果导致数据倾斜的是 ...
- 1.Django安装与运行
Django基本配置 Python的WEB框架有Django.Tornado.Flask 等多种,Django相较与其他WEB框架其优势为:大而全,框架本身集成了ORM.模型绑定.模板引擎.缓存.Se ...
- c 编译器大全
c 编译器大全 看了下nginx的auto/cc下的目录,nginx对多种c语言的编辑器都进行了支持.才知道c语言有那么多编辑器. 编译器原理 所谓编译器,就是执行下面的三步骤: 1 将目标语言转换为 ...
- nginx切割日志脚本
nginx切割日志脚本 #!/bin/bash #cut nginx log #2018年9月26日14:26:44 #by jiajiezhao ########################## ...
- 【java设计模式】(4)---工厂模式(案例解析)
设计模式之工厂模式 工厂模式分三种:简单工厂模式(也叫静态工厂模式),工厂方法模式(也叫多形性工厂),抽象工厂模式(也叫工具箱)下面会一一举例. 一.概念 1.什么是工厂模式 这种类型的设计模式属于创 ...
- 今天俺要说一说简单工厂模式(Simple Factory)
前言:简单工厂不能说是设计模式,它是一种变成习惯,因为它不是23种设计模式之一,但是它在实际开发中经常用到,而且也非常简单,可以说是工厂模式的一个引导. 大多程序员都是单身狗,为了弥补一下你们的心情, ...
- qt sleep
原文 Qt 为何没有提供 Sleep 论坛上不时见到有人问: Qt 为什么没有提供跨平台的 sleep 函数? 使用平台相关的 Sleep 或 nanosleep 以后,界面为什么没有反应? QThr ...
- qt集成dsoframer.ocx打开office办公软件
最近一段时间真是事情太多了,前不久项目中一个嵌入office软件的问题,由于没有时间研究,且项目的需求是浏览word文档,偷了一个懒,把word文档转换成pdf文档,然后嵌入libcef浏览器给打开了 ...
- 一文看懂https如何保证数据传输的安全性的
通过漫画的形式由浅入深带你读懂htts是如何保证一台主机把数据安全发给另一台主机的 对称加密 一禅:在每次发送真实数据之前,服务器先生成一把密钥,然后先把密钥传输给客户端.之后服务器给客户端发送真实数 ...
- ansible学习系列2-ansible常用模块使用
1. 查看支持的模块 [root@localhost ~]# ansible-doc -l 这里我们看下ansible的支持的模块个数 [root@localhost ~]# ansible-doc ...