LeetCode:Can Place Flowers - 花坛插花_weixin_33797791的博客-程序员秘密

技术标签: python  java  数据结构与算法  

1、题目名称

Can Place Flowers(花坛插花)

2、题目地址

https://leetcode.com/problems/can-place-flowers/description/

3、题目内容

英文:

Suppose you have a long flowerbed in which some of the plots are planted and some are not. However, flowers cannot be planted in adjacent plots - they would compete for water and both would die.

Given a flowerbed (represented as an array containing 0 and 1, where 0 means empty and 1 means not empty), and a number n, return if n new flowers can be planted in it without violating the no-adjacent-flowers rule.

Example 1:

Input: flowerbed = [1,0,0,0,1], n = 1
Output: True

Example 2:

Input: flowerbed = [1,0,0,0,1], n = 2
Output: False

Note:

  1. The input array won't violate no-adjacent-flowers rule.
  2. The input array size is in the range of [1, 20000].
  3. n is a non-negative integer which won't exceed the input array size.

中文:

有一个花坛,用数组表示,0表示当前位置还没有花,1表示当前位置有一朵花,现在你手上有n朵花,要把这n朵花插到花坛中去。但要注意,任意两朵花不能相邻。

4、解题方法

先要考虑极端的情况,即花坛中只有一个空位置时,手中恰有一朵花,是可以插进去的。

在向花坛中插花时,先处理花坛的首尾,再通过循环将剩余的花插入到合适的空位置。

/**
 * LeetCode 605 - Can Place Flowers 
 * @文件名称 Solution.java
 * @文件作者 Tsybius2014
 * @创建时间 2017年9月25日17:15:39
 */
class Solution {

    /**
     * 花坛插花 - 检测花坛内是否还能种植n朵花
     * @param flowerbed
     * @param n
     * @return
     */
    public boolean canPlaceFlowers(int[] flowerbed, int n) {
        
        //没有多余的花要插,一定是满足条件的
        if (n <= 0) {
            return true;
        }
        
        //只有一个空位的情况,直接判断
        if (flowerbed.length == 1) {
            if (flowerbed[0] == 0) {
                if (n <= 1) {
                    return true;
                } else {
                    return false;
                }
            } else {
                if (n <= 0) {
                    return true;
                } else {
                    return false;
                }
            }
        }
        
        //先顾首尾
        if (flowerbed.length >= 2) {
            if (flowerbed[0] == 0 && flowerbed[1] == 0) {
                flowerbed[0] = 1;
                n--;
                if (n == 0) {
                    return true;
                }
            }
            if (flowerbed[flowerbed.length - 1] == 0 &&
                flowerbed[flowerbed.length - 2] == 0) {
                flowerbed[flowerbed.length - 1] = 1;
                n--;
                if (n == 0) {
                    return true;
                }
            }
        }
        
        //只有左右都无花的情况才能插入一朵花
        for (int i = 1; i < flowerbed.length - 1; i++) {
            if (flowerbed[i - 1] == 0 && flowerbed[i] == 0 && flowerbed[i + 1] == 0) {
                flowerbed[i] = 1;
                n--;
                if (n == 0) {
                    return true;
                }
            }
        }
        
        return false;
    }
}

END

转载于:https://my.oschina.net/Tsybius2014/blog/1543046

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_33797791/article/details/92549155

智能推荐

C++笔记之内存(内存分区、动态内存、智能指针)_今年五岁!!!的博客-程序员秘密

1.内存部分1.1内存分区模型内存分四区:代码区、全局区、栈区、堆区。前两者编译时划分,后两者运行时划分。全局区存放全局变量和静态变量以及常量,其中常量区里含有字符串常量和其他常量(const修饰的全局变量)且常量区的数据不可更改。栈区包含形参、局部变量等。堆区使用malloc、new等函数开辟的空间。(内存分区详情以及new的使用见《C++笔记二》第一节内存四区。)示例:const int t1 = 10;int t2; void test21(int t21){ cout&lt;&l

SAP 各模块事务代码------持续更新_Qunending的博客-程序员秘密

1.FICO:1.1 AS01/AS02/AS03 创建/修改/查看固定资产1.2 KS01/KS02/KS03 创建/修改/查看成本中心

Salesforce 数据导入工具(Dataloder)_我头发乱了伢的博客-程序员秘密

Salesforce 数据导入工具介绍Salesforce 数据导入工具有Salesforce Classic 和 Lightning Experience 管理员和最终管理员都可以使用数据导入向导更强大的选项是 Data Loader . 这是一个客户端应用程序 , 可供用户使用 , 具有管路员权限 , 可从设置页面下载 .####### 首先 , 我们来下载进入setup 点击搜索 D...

8个正弦波逆变器带你感受生活中无处不在的科技魅力_正弦波逆变器原理_weixin_43618242的博客-程序员秘密

逆变器是把直流电能(电池、蓄电瓶)转变成交流电(一般为220V,50Hz正弦波)。它由逆变桥、控制逻辑和滤波电路组成。广泛适用于空调、家庭影院、电动砂轮、电动工具、缝纫机、DVD、VCD、电脑、电视、洗衣机、抽油烟机、冰箱,录像机、按摩器、风扇、照明等。在国外因汽车的普及率较高外出工作或外出旅游即可用逆变器连接蓄电池带动电器及各种工具工作。通过点烟器输出的车载逆变是 20W 、 40W 、 80W 、 120W 到 150W 功率规格。再大一些功率逆变电源要通过连接线接到电瓶上。把家用电器连接到电源转换器的

Vue学习18.1-----webpack打包处理less文件_vite 打包单个less文件_小虾米的成长之路的博客-程序员秘密

1、运行npm i less-loader less -D2、配置webpack.config.js文件const path = require('path');const HtmlWebpackPlugin = require('html-webpack-plugin');//创建插件的实例对象const htmlPlugin = new HtmlWebpackPlugi...

InfluxDB(二) Writing Data with the HTTP API_weixin_34245082的博客-程序员秘密

2019独角兽企业重金招聘Python工程师标准&gt;&gt;&gt; ...

随便推点

【项目实战】如何使用Postman调用WebSocket程序_postman调用websocket接口_本本本添哥的博客-程序员秘密

项目中需要使用WebSocket进行通信,开发完了WebSocket接口,总得测试吧,以下是Postman调用WebSocket程序的方法。

Element 多选表格前端分页 多选框回显_Windyluna的博客-程序员秘密

先上效果图:功能拆分:先模拟100条数据在 tableData将tableData 分页切片处理:this.tableData.slice( (this.pageNumber - 1) * this.pageSize, this.pageNumber * this.pageSize );注意,这里使用 computed 计算属性 pageTableData 来存储切片后当前页的列表数据分页选择数据回显并且保存选中的数据完整代码实现:&lt;template&gt; &lt;div&gt

微信小程序gridview flex布局 居中对齐末尾空缺巧妙解决_吉凶以情迁的博客-程序员秘密

&lt;view class="item-container"&gt; &lt;view class="item" wx:for="{{item}}" wx:key="id" id="{{item.id}}" data-index="{{index}}" catchtap='itemClick' data-model='{{item}}'&gt; &lt;v...

机器学习—多元线性回归案例_多元线性回归模型案例_好漂亮的妹妹的博客-程序员秘密

机器学习入门经典案例,《波斯顿房价预测》通过多元线性回归建立模型进行机器学习从而对该模型进行评估。

oracle一体机的管理界面,设置oracle开机自启动_Zhaoyang Wang的博客-程序员秘密

ORACLE 设置开机自启动说明:一般而言windows平台oracle服务器会自动启动,但linux不会,包括监听、数据库、控制台emctl 需要进行设置可用方式:方式一:利用OS的服务:oratab方式二:利用oracle自带的dbstart和dbshut个人觉得两种方式没有特别大的区别,最后都是利用linux的服务来实现,本文结合自己生产操作,利用oratab举例说明step 1 修改ora...

推荐文章

热门文章

相关标签