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和目标值,编 ...
随机推荐
- ASP.NET Core Mvc中空返回值的处理方式
原文地址:https://www.strathweb.com/2018/10/convert-null-valued-results-to-404-in-asp-net-core-mvc/ 作者: F ...
- Quartz.NET学习笔记(一) 简介
Quartz.NET是一款开源的任务调度框架,他是由Java中的任务调度框架Quartz移植而来的.官方网站https://www.quartz-scheduler.net/. Quartz.Net的 ...
- Android中,粗暴的方式,修改字体
序 在 Android 下使用自定义字体已经是一个比较常见的需求了,最近也做了个比较深入的研究. 那么按照惯例我又要出个一篇有关 Android 修改字体相关的文章,但是写下来发现内容还挺多的,所以我 ...
- npm 包的 发布 流程
npm 包的发布流程 本文主要是针对 还未曾发布过自己的 npm 的同学,阐述一下 npm 的发布流程 熟悉的同学,可以绕道了. 首先你得有一个 自己的 npmjs.com 的账号 (没有的话,就到 ...
- .net core通过多路复用实现单服务百万级别RPS吞吐
多路复用其实并不是什么新技术,它的作用是在一个通讯连接的基础上可以同时进行多个请求响应处理.对于网络通讯来其实不存在这一说法,因为网络层面只负责数据传输:由于上层应用协议的制订问题,导致了很多传统服务 ...
- 【Python3爬虫】12306爬虫
此次要实现的目标是登录12306网站和查看火车票信息. 具体步骤 一.登录 登录功能是通过使用selenium实现的,用到了超级鹰来识别验证码.没有超级鹰账号的先注册一个账号,充值一点题分,然后把下载 ...
- 自己构建一个Spring自定义标签以及原理讲解
平时不论是在Spring配置文件中引入其他中间件(比如dubbo),还是使用切面时,都会用到自定义标签.那么配置文件中的自定义标签是如何发挥作用的,或者说程序是如何通过你添加的自定义标签实现相应的功能 ...
- centos中安装虚拟机
我这里选用的虚拟机软件为virtualbox 下载wget http://download.virtualbox.org/virtualbox/5.2.2/VirtualBox-5.2-5.2.2_1 ...
- 【深度学习与TensorFlow 2.0】卷积神经网络(CNN)
注:在很长一段时间,MNIST数据集都是机器学习界很多分类算法的benchmark.初学深度学习,在这个数据集上训练一个有效的卷积神经网络就相当于学习编程的时候打印出一行“Hello World!”. ...
- #4 Python面向对象(三)
前言 前两节讲解了Python面向对象的思想和Python类中各种变量的含义以及区别.肯定有小伙伴会问,类初始化时是否可以传入参数?如果有多个类中含有共同的函数方法,是否可以重复利用?本节就带着这些问 ...