LeetCode面试算法-力扣 605. 种花问题

题目描述

    假设有一个很长的花坛,一部分地块种植了花,另一部分却没有。可是,花不能种植在相邻的地块上,它们会争夺水源,两者都会死去。给你一个整数数组 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,则下一位必定是空位,且必然不能种花,因为左面已经有一朵花了,因此直接跳到下下位,即i+2;
若当前位是0,判断下一位是否为0,若为0,则说明这个位置可以种花,并且继续跳两位;考虑是否跳到最后一位,即length-1,则必然可以种下,因为左面又为0,而右面没有数字;
若当前位是0,判断下一位是否为0,若为1,则说明下一位为1,且下下位为0,因此我们直接跳三步。


class Solution {
    public boolean canPlaceFlowers(int[] flowerbed, int n) {
        if (flowerbed == null || flowerbed.length == 0) {
            return false;
        }
        int cnt = 0;
        for (int i = 0; i < flowerbed.length; ) {
            if (flowerbed[i] == 1) {
                i = i + 2;
            } else if (i == flowerbed.length - 1 || flowerbed[i + 1] == 0) {
                cnt++;
                i = i + 2;
            } else {
                i = i + 3;
            }
        }
        return cnt >= n;
    }
}

你可能感兴趣的:(LeetCode-面试-算法,JavaStudy,leetcode,算法,面试)