天天看點

算法數組之種花問題

題目

假設有一個很長的花壇,一部分地塊種植了花,另一部分卻沒有。可是,花不能種植在相鄰的地塊上,它們會争奪水源,兩者都會死去。

給你一個整數數組  flowerbed 表示花壇,由若幹 0 和 1 組成,其中 0 表示沒種植花,1 表示種植了花。另有一個數 n ,能否在不打破種植規則的情況下種入 n 朵花?能則傳回 true ,不能則傳回 false。

Example

輸入:flowerbed = [1,0,0,0,1], n = 1
輸出:true

輸入:flowerbed = [1,0,0,0,1], n = 2
輸出:false      

思路

采用跳格子的方式來解答

1.如果周遊的時候遇到1則目前索引已經種過花了,于是需要跳倆格才有可能種,i+2;

2.如果目前索引的後一位(i+1)遇到了0,由于之前我們跳格子都是跳倆格,則 i-1也必為0,目前索引就滿足種花;如果目前索引的元素是最後的元素,由于之前跳格子是跳2格,i-1是0,而且目前最後一格,是以也滿足種花,繼續第一步的操作跳倆格,然後可種花的數量-1;

3.如果前索引的後一位(i+1) 遇到了1,則需要跳三格才能找到能種花的位置,也就是 i+3;

代碼實作

class Solution {
    public boolean canPlaceFlowers(int[] flowerbed, int n) {
        for (int i = 0; i < flowerbed.length;) {
            // 如果目前遇到1,則說明i+1一定是為0的,于是跳倆格
            if (flowerbed[i] == 1) {
                i += 2;
            // 由于遇到1都是跳倆格,并且根據規定i-1一定是為0,如果當到達最後一位時,由于後面已經沒有值了,是以是可種的
            // 或者,如果當 i 下一位不為1時,則i處也可中
            } else if (i == flowerbed.length - 1 || flowerbed[i+1] == 0){
                n--;
                i += 2;
            // 否則當 i+1 處為1時,根據規則必須要跳三格才能看能不能種花
            } else {
                i += 3;
            }
        }

        return n <= 0;
    }
}      
  • ​​# UE4:來為我們的角色制作一個血條吧​​
  • ​​使用 Google Breakpad 來助力解決程式崩潰​​
  • ​​UE4 多人遊戲伺服器探索​​
  • ​​使用虛幻引擎自動化工具實作自動化部署​​
  • ​​如何在 UE4 中制作一扇自動開啟的大門​​
  • ​​如何在 UE4 中用代碼去控制角色移動​​
  • ​​如何給 UE4 場景添加遊戲角色​​
  • ​​UE4:Android 平台開發實踐指南​​
  • ​​UE4 開發避坑指南(持續更新)​​
  • ​​新年開工啦,放個小煙花慶祝一下​​
  • ​​聊聊與蘋果稽核員的愛恨情仇(下)​​
  • ​​聊聊與蘋果稽核員的愛恨情仇(上)​​
  • ​​一名普通工具人的 2021 | 2021年終總結​​
  • ​​二叉樹刷題總結:二叉搜尋樹的屬性​​
  • ​​二叉樹總結:二叉樹的屬性​​
  • ​​二叉樹總結:二叉樹的修改與構造​​
  • ​​StoreKit2 有這麼香?嗯,我試過了,真香​​
  • ​​看完這篇文章,再也不怕面試官問我如何構造二叉樹啦!​​
  • ​​那幫做遊戲的又想讓大家氪金,太壞了!​​
  • ​​手把手帶你撸一個網易雲音樂首頁 | 适配篇​​
  • ​​手把手帶你撸一個網易雲音樂首頁(三)​​
  • ​​手把手帶你撸一個網易雲音樂首頁(二)​​
  • ​​手把手帶你撸一個網易雲音樂首頁(一)​​
  • ​​代碼要寫注釋嗎?寫你就輸了​​
  • ​​Codable釋出這麼久我就不學,摸魚爽歪歪,哎~就是玩兒​​
  • ​​iOS 優雅的處理網絡資料,你真的會嗎?不如看看這篇​​
  • ​​UICollectionView 自定義布局!看這篇就夠了​​
  1. 關注公衆号--- HelloWorld傑少