605. 种花问题003(贪心算法+思路+详解)
一:題目
假設(shè)有一個(gè)很長(zhǎng)的花壇,一部分地塊種植了花,另一部分卻沒(méi)有。可是,花不能種植在相鄰的地塊上,它們會(huì)爭(zhēng)奪水源,兩者都會(huì)死去。
給你一個(gè)整數(shù)數(shù)組 flowerbed 表示花壇,由若干 0 和 1 組成,其中 0 表示沒(méi)種植花,1 表示種植了花。另有一個(gè)數(shù) n ,能否在不打破種植規(guī)則的情況下種入 n 朵花?能則返回 true ,不能則返回 false。
示例 1:
輸入:flowerbed = [1,0,0,0,1], n = 1
輸出:true
示例 2:
輸入:flowerbed = [1,0,0,0,1], n = 2
輸出:false
二:思路
從左向右遍歷花壇,在可以種花的地方就種一朵,能種就種
(因?yàn)樵谌我环N花時(shí)候,不種都不會(huì)得到更優(yōu)解),就是一種貪心的思想
這里可以種花的條件是:
自己為空
自己是最左 或者 左邊為空
自己是最右 或者 右邊為空
i == 0 ||flowerbed[i-1] == 0 :這里的順序不能改變 因?yàn)楫?dāng) i==0時(shí)
如果flowerbed[i-1]在前面就會(huì)出現(xiàn)越界問(wèn)題
三:上碼
class Solution { public:bool canPlaceFlowers(vector<int>& flowerbed, int n) {/**從左向右遍歷花壇,在可以種花的地方就種一朵,能種就種(因?yàn)樵谌我环N花時(shí)候,不種都不會(huì)得到更優(yōu)解),就是一種貪心的思想這里可以種花的條件是:自己為空自己是最左 或者 左邊為空 自己是最右 或者 右邊為空i == 0 ||flowerbed[i-1] == 0 :這里的順序不能改變 因?yàn)楫?dāng) i==0時(shí) 如果flowerbed[i-1]在前面就會(huì)出現(xiàn)越界問(wèn)題 */ int count = 0;for(int i = 0; i < flowerbed.size(); i++){if(flowerbed[i] == 0 && ( i == 0 ||flowerbed[i-1] == 0 ) && (i + 1 == flowerbed.size() || flowerbed[i+1] == 0 )){flowerbed[i] = 1;count++;}}if(count >= n)return true;elsereturn false; } };總結(jié)
以上是生活随笔為你收集整理的605. 种花问题003(贪心算法+思路+详解)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 福特新专利曝光 计划在皮卡安装充气保险杠
- 下一篇: 10-7 3-2-(b)查询由生产厂商B