Leetcode605——种花问题
假设有一个很长的花坛,一部分地块种植了花,另一部分却没有。可是,花不能种植在相邻的地块上,它们会争夺水源,两者都会死去。
给你一个整数数组 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 * 10e4
flowerbed[i]
为0
或1
flowerbed
中不存在相邻的两朵花0 <= n <= flowerbed.length
看到这个题,我的第一思路就是,查找连续0的个数,若连续有3个0,则在中间种上花(在数组对应位置的值设为1),对于两个边界进行分类讨论,简单题,思路很清晰
但是!
我看到了一种非常妙的思路,在原数组的头和尾添加两个0,这样就可以避免对边界的分类讨论,这种思想称为防御式编程。
可见,对于一个简单题,一个好的思路与规划还是可以使得编码的效率事半功倍的(*^▽^*)
class Solution { public boolean canPlaceFlowers(int[] flowerbed, int n) { int len = flowerbed.length; int[] temp = new int[len+2]; temp[0] = 0; temp[len+1] = 0; for(int i=0;i<len;i++) { temp[i+1] = flowerbed[i]; } for(int i=1;i<=temp.length-2;i++) { if(temp[i]==0 && temp[i-1]==0 && temp[i+1]==0) { temp[i] = 1; n--; } } if(n<=0) { return true; } return false; } }
分类:
LeetCode
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理