605. 种花问题003(贪心算法+思路+详解)
生活随笔
收集整理的這篇文章主要介紹了
605. 种花问题003(贪心算法+思路+详解)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一:題目
假設有一個很長的花壇,一部分地塊種植了花,另一部分卻沒有。可是,花不能種植在相鄰的地塊上,它們會爭奪水源,兩者都會死去。
給你一個整數數組 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
二:思路
從左向右遍歷花壇,在可以種花的地方就種一朵,能種就種
(因為在任一種花時候,不種都不會得到更優解),就是一種貪心的思想
這里可以種花的條件是:
自己為空
自己是最左 或者 左邊為空
自己是最右 或者 右邊為空
i == 0 ||flowerbed[i-1] == 0 :這里的順序不能改變 因為當 i==0時
如果flowerbed[i-1]在前面就會出現越界問題
三:上碼
class Solution { public:bool canPlaceFlowers(vector<int>& flowerbed, int n) {/**從左向右遍歷花壇,在可以種花的地方就種一朵,能種就種(因為在任一種花時候,不種都不會得到更優解),就是一種貪心的思想這里可以種花的條件是:自己為空自己是最左 或者 左邊為空 自己是最右 或者 右邊為空i == 0 ||flowerbed[i-1] == 0 :這里的順序不能改變 因為當 i==0時 如果flowerbed[i-1]在前面就會出現越界問題 */ 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; } };總結
以上是生活随笔為你收集整理的605. 种花问题003(贪心算法+思路+详解)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 福特新专利曝光 计划在皮卡安装充气保险杠
- 下一篇: realme 真我 GT5 Pro 手机