【C++刷题】力扣-#605-种花问题

题目描述

假设有一个很长的花坛,一部分地块种植了花,另一部分却没有。可是,花不能种植在相邻的地块上,它们会争夺水源,两者都会死去。

给你一个整数数组 flowerbed 表示花坛,由若干 0 和 1 组成,其中 0 表示没种植花,1 表示种植了花。另有一个数 n,能否在不打破种植规则的情况下种入 n 朵花?能则返回 true ,不能则返回 false 。

示例

示例 1

bash 复制代码
输入:flowerbed = [1,0,0,0,1], n = 1
输出:true

示例 2

bash 复制代码
输入:flowerbed = [1,0,0,0,1], n = 2
输出:false

题解

这个问题可以通过检查 flower_index 位置及其相邻位置来解决。

  1. 检查边界条件:如果 flower_index 为 0 或 flower_index 为 flowerbed 的最后一个索引,直接返回 false。
  2. 检查相邻位置:如果 flower_index 位置的花坛已经被占用,或者其相邻位置(左侧和右侧)已经被占用,返回 false。
  3. 检查 n 的值:如果 n 大于 flowerbed 中 0 的数量,返回 false。

代码实现

cpp 复制代码
bool canPlaceFlowers(vector<int>& flowerbed, int n) {
    int count = 0; // 可种植的花朵数
    int len = flowerbed.size();

    for (int i = 0; i < len; ++i) {
        // 检查当前位置是否可以种植花朵
        if (flowerbed[i] == 0) {
            // 检查左右是否有花朵
            bool leftIsClear = (i == 0 || flowerbed[i - 1] == 0);
            bool rightIsClear = (i == len - 1 || flowerbed[i + 1] == 0);

            if (leftIsClear && rightIsClear) {
                count++;          // 可以种植一朵花
                flowerbed[i] = 1; // 标记为已种植
                if (count >= n) {
                    return true; // 已经有足够的空间种植 n 朵花
                }
            }
        }
    }

    return count >= n; // 检查是否有足够的空间种植 n 朵花
}

复杂度分析

● 时间复杂度:O(m),其中 m 是数组 flowerbed 的长度。我们只需要遍历一次数组。

● 空间复杂度:O(1),因为我们只使用了常数个额外变量。

这个算法通过一次遍历数组,检查每个位置是否可以种植花朵,并确保没有两朵花相邻。如果找到了足够的空间种植 n 朵花,就返回 true,否则返回 false。

相关推荐
D_evil__12 分钟前
[C++高频精进] 并发编程:线程基础
c++
云里雾里!44 分钟前
力扣 209. 长度最小的子数组:滑动窗口解法完整解析
数据结构·算法·leetcode
Mr_WangAndy1 小时前
C++17 新特性_第二章 C++17 语言特性_std::any和string_view
c++·string_view·c++40周年·c++17新特性·c++新特性any
CoderYanger2 小时前
递归、搜索与回溯-穷举vs暴搜vs深搜vs回溯vs剪枝:12.全排列
java·算法·leetcode·机器学习·深度优先·剪枝·1024程序员节
憨憨崽&2 小时前
进击大厂:程序员必须修炼的算法“内功”与思维体系
开发语言·数据结构·算法·链表·贪心算法·线性回归·动态规划
水天需0102 小时前
C++ 三种指针转换深度解析
c++
chem41113 小时前
C 语言 函数指针和函数指针数组
c语言·数据结构·算法
言言的底层世界3 小时前
c++中STL容器及算法等
开发语言·c++·经验分享·笔记
Mr_WangAndy3 小时前
C++17 新特性_第一章 C++17 语言特性___has_include,u8字符字面量
c++·c++40周年·c++17新特性·__has_include·u8字面量
liu****3 小时前
八.函数递归
c语言·开发语言·数据结构·c++·算法