Leetcode贪心 种花问题
生活随笔
收集整理的這篇文章主要介紹了
Leetcode贪心 种花问题
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
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.
Given an integer array flowerbed containing 0’s and 1’s, where 0 means empty and 1 means not empty, and an integer n, return if n new flowers can be planted in the flowerbed without violating the no-adjacent-flowers rule.
下面是普通的貪心做法,需要考慮三種邊界條件,時(shí)間復(fù)雜度還可以繼續(xù)優(yōu)化.
優(yōu)化前代碼
class Solution { public:bool canPlaceFlowers(vector<int>& flowerbed, int n) {int len = flowerbed.size();if(n == 0) return true;if(len == 1){if(flowerbed[0] == 1) return false;else return true;}if(flowerbed[0] == 0 && flowerbed[1] == 0){flowerbed[0] = 1;n--;}for(int i = 1; i < len-1; i++){if(flowerbed[i-1] == 0 && flowerbed[i+1] == 0 && flowerbed[i] == 0){flowerbed[i] = 1;n--;}if(n == 0) return true;}if(flowerbed[len-2] == 0 && flowerbed[len-1] == 0){flowerbed[len-1] = 1;n--;}if(n != 0) return false;else return true;} };倘若當(dāng)前位置是有花的或者是剛種下花,說明下一個位置不能種花,可以直接跳過。
優(yōu)化后代碼
class Solution { public:bool canPlaceFlowers(vector<int>& flowerbed, int n) {int len = flowerbed.size();if(n == 0) return true;if(len == 1){if(flowerbed[0] == 1) return false;else return true;}if(flowerbed[0] == 0 && flowerbed[1] == 0){flowerbed[0] = 1;n--;}for(int i = 1; i < len-1; i++){if(flowerbed[i] == 1)i++;else if(flowerbed[i-1] == 0 && flowerbed[i+1] == 0){n--;flowerbed[i] = 1;i++;}if(n == 0) return true;}if(flowerbed[len-2] == 0 && flowerbed[len-1] == 0){flowerbed[len-1] = 1;n--;}if(n != 0) return false;else return true;} };總結(jié)
以上是生活随笔為你收集整理的Leetcode贪心 种花问题的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: sklearn集成学习概述
- 下一篇: Leetcode贪心 验证回文字符串