当前位置: 首页 > news >正文

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 <= flowerbed.length <= 2 * 104
flowerbed[i] 为 0 或 1
flowerbed 中不存在相邻的两朵花
0 <= n <= flowerbed.length

1.暴力求解

从数组的首个元素开始判断是否种花,判断当前位置的前后位置是否种花,要注意数组越界问题和首地址和尾地址位置问题。

bool canPlaceFlowers(int* flowerbed, int flowerbedSize, int n){int i=0;if(n==0){return true;}if(flowerbedSize==1){if(flowerbed[i]==0){flowerbed[i]==1;n--;i++;}}while(i<flowerbedSize){if(i==0){if(flowerbed[0]==0&&flowerbed[1]==0){flowerbed[i]==1;n--;i+=2;}else{i+=2;}}else if(i==flowerbedSize-1){if(flowerbed[i]==0&&flowerbed[i-1]==0){flowerbed[i]=1;n--;}else{i++;}} else if(flowerbed[i]==1){i+=2;}else if(flowerbed[i]==0&&i>0&&flowerbed[i-1]==0&&flowerbed[i+1]==0&&i+1<flowerbedSize){flowerbed[i]==1;n--;i+=2;}else if(flowerbed[i+1]==1&&i+1<flowerbedSize){i+=3;}else{i+=2;}}if(n<=0){return true;}else{return false;}
}
2.暴力优化

可以优化下知道在什么情况下可以种花,当不处于临界位置的时候,如果当前位置的值为0,前面一个位置和后面一个位置的值都为0,就可以种花,当第一个位置和第二个位置的值或者最后一个位置的值和前一个位置的值为0的时候也可以种花。要注意数组越界的问题。

bool canPlaceFlowers(int* flowerbed, int flowerbedSize, int n){                                                for(int i=0;i<flowerbedSize;i++){// printf("i=%d\n",i);if(flowerbed[i]==0&&(i==0||flowerbed[i-1]==0)&&(((i+1<flowerbedSize)&&(flowerbed[i+1]==0))||i==flowerbedSize-1)){flowerbed[i]=1;n--;}}return n<=0;
}
0求解法

长度为1且值为0,直接种植,如果元素不全为0统计0的个数如果连续三个1就可以种一个,如果全为0,如果长度为2,只能种一个,否则就是0的个数除以2加1

bool canPlaceFlowers(int* flowerbed, int flowerbedSize, int n){                                                int count=0,i,sum=0,flage=0;if(flowerbedSize==1){if(flowerbed[0]==0){return true;}}if(flowerbed[0]==0){count++;}for(i=0;i<flowerbedSize;i++){if(flowerbed[i]==0){count++;}else if(count>=2){flage=1;sum+=(count-1)/2;count=0;}else if(count<2){count=0;flage=1;}}if(count>=2){if(flage==0){if(count==2){sum-=1;}else{sum+=count/2;}}else{if(count==2){sum+=1;}else{if(count%2==0){sum+=count/2;}else{sum+=(count-1)/2;}}}}if(sum>=n){return true;}else{return false;}
}
http://www.lryc.cn/news/137441.html

相关文章:

  • Elasticsearch 常见的简单查询
  • C#使用xamarin进行跨平台开发
  • xargs 的用法 在1个文件夹中批量删除文件,这些删除的文件名是另一个文件夹中的文件名。
  • 集简云本周新增/更新:新增2大功能,集成2款应用,更新4款应用,新增近20个动作
  • MySQL存储过程怎么写?看完这篇秒懂
  • STM32电源名词解释
  • 《操作系统真象还原》学习笔记:第七章 中断
  • 【学习笔记之vue】These dependencies were not found:
  • 【数据结构】实现栈和队列
  • APT60DQ20BG-ASEMI新能源功率器件APT60DQ20BG
  • [Android Framework] 系统 ANR 问题排查实践小结
  • 【Unity】Text文本组件的一些操作
  • 如何通过tomcat下载映射下载文件
  • Redis的8种数据结构和应用场景介绍,面试题答案
  • Log4Qt日志框架(1)- 引入到QT中
  • 【算法刷题之哈希表篇(1)】
  • uni-app 打包生成签名Sha1
  • 【Django】Django创建一个文件下载服务
  • Navicat for Mysql 显示 emoji 表情符号乱码问题 — 其它乱码情况都可参考
  • 《数字图像处理-OpenCV/Python》连载(2)目录
  • Go学习-Day4
  • 将el-dialog封装成函数调用
  • Windows10批处理命令行设置环境变量笔记,无需重新安装python与chrome
  • 统计学补充概念07-比较树
  • 设计原则 --《设计模式之美》总结篇
  • Day16-蜗牛影城后端开发
  • axios / fetch 实现 stream 流式请求
  • Pytorch学习:torchvison.transforms常用包(ToTensor、Resize、Compose和RandomCrop)
  • 算法通关村十二关 | 字符串转换
  • 前端进阶Html+css09----BFC模型