zoukankan      html  css  js  c++  java
  • 605. 种花问题『简单』

    题目来源于力扣(LeetCode

    一、题目

    605. 种花问题

    题目相关标签:数组

    提示:

    1. 数组内已种好的花不会违反种植规则。
    2. 输入的数组长度范围为 [1, 20000]。
    3. n 是非负整数,且不会超过输入数组的大小。

    二、解题思路

    1. 通过计算 flowerbed 数组中连续的 0 的个数,来判断能够种几朵花

    2. 注意点:如果数组的起始索引为 0 或结束索引为 0 的情况下,并且连续 0 的个数大于等于 2 时,便可以最少种 1 朵花,大于等于 4 时,可以最少种 2 朵花

    3. 据题意:数组=内已种好的花不会违反种植规则。即表明初始的 flowerbed 数组中不会存在相邻的两个元素,值都为 1

    4. 除数组的起始和结束的连续 0 外,其他位置的连续 0 的个数,个数需要满足 2 * i + 1 的式子才能种 i 朵花

    三、代码实现

    public static boolean canPlaceFlowers(int[] flowerbed, int n) {
        // 变量 count 记录连续 0 的数量,为方便后续计算,令初始时计零的个数为 1
        // {0, 0, 1}  此时 0 的个数为 2,却因为在开头,所以也可以种 1 朵花
        int count = 1;
        // 记录能够种花的数量
        int num = 0;
    
        for (int i = 0; i < flowerbed.length; i ++) {
            if (flowerbed[i] == 0) {
                // 连续出现 0 的次数加 1
                count++;
            } else {
                // 1 或 2 次可以种 0 朵,3 次可以种 1 朵,5 次可以种 2 朵
                num += (count - 1) / 2;
                // 满足种花的数量后,返回 true
                if (num >= n) {
                    return true;
                }
                // count 重置为 0,最少需要 3 个连续的 0 才能种 1 朵花
                count = 0;
            }
        }
        // 处理最后的零的个数,两个零也可以种 1 朵,4 个零种 2 朵,3 个零种 1 朵,5 个零种 2 朵
        // {1, 0, 0},此时,两个 0 也可以种 1 朵花
        if (count > 0) {
            num += count / 2;
        }
        return num >= n;
    }
    

    四、执行用时

    五、部分测试用例

    public static void main(String[] args) {
        int[] flowerbed = {1, 0, 0, 0, 1};
        int n = 1;  // output:true
    
    //    int[] flowerbed = {1, 0, 0, 0, 1};
    //    int n = 2;  // output:false
        boolean result = canPlaceFlowers(flowerbed, n);
        System.out.println(result);
    }
    
  • 相关阅读:
    如何删除完全重复的列
    串联多个字符串,引发string和stringBuilder的比较
    借鉴ANJOU的方法改写了上次的TreeView
    如何改变ListBox中内容的顺序
    执行Insert语句时使用string的Format用法
    moss 2007 中FCKEditor编辑器的使用
    qt 获得cmd 命令运行的结果 GIS
    迭代器 GIS
    win32 创建带图片的button GIS
    c++标准库的构成 GIS
  • 原文地址:https://www.cnblogs.com/zhiyin1209/p/12944415.html
Copyright © 2011-2022 走看看