605. 种花问题

题目:

605. 种花问题
605. 种花问题_第1张图片
605. 种花问题_第2张图片

题解:

防御式编程思想:

在 flowerbed 数组两端各增加一个 0, 这样处理的好处在于不用考虑边界条件。

我们从左到右扫描数组 flowerbed,任意位置处只要连续出现三个 0 就可以栽上一棵花。
并且把中间位置的 0 修改成 1,并将计数器 count 增加 1

605. 种花问题_第3张图片
在这里插入图片描述

代码:

public class code605 {

    public static boolean canPlaceFlowers(int[] flowerbed, int n) {
        if(n == 0)
        {
            return true;
        }
        int temp[] = new int[flowerbed.length + 2];
        temp[0] = 0;
        temp[temp.length - 1] = 0;
        for(int i = 0; i < flowerbed.length; i++)
        {
            temp[i + 1] = flowerbed[i];
        }
        int count = 0;
        for(int i = 1; i < temp.length - 1; i++)
        {
            if(temp[i] == 0 && temp[i - 1] == 0 && temp[i + 1] == 0)
            {
                count++;
                temp[i] = 1;
            }
            if(count >= n)
            {
                return true;
            }
        }
        return false;
    }

    public static void main(String[] args) {
        int flowerbed[] = { 1, 0, 0, 0, 1 };
        int n1 = 1;
        int n2 = 2;
        boolean flag1 = canPlaceFlowers(flowerbed, n1);
        boolean flag2 = canPlaceFlowers(flowerbed, n2);
        System.out.println(flag1);
        System.out.println(flag2);
    }
}

参考:

  1. 在原数组的首尾添加0,免去特判首尾的情况
  2. 种花问题
  3. VIVO提前批编程题
  4. vivo 笔试 - leetcode原题,顺便统计下AC情况
  5. VIVO提前批笔试
  6. vivo笔试-提前批-20200607

你可能感兴趣的:(605. 种花问题)